⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialogs.c

📁 C语言编程中算法数据结构中的树行代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************
*
*
* Notepad2
*
* Dialogs.c
*   Notepad2 dialog boxes implementation
*
* See Readme.txt for more information about this source code.
* Please send me your comments to this work.
*
* See License.txt for details about distribution and modification.
*
*                                              (c) Florian Balmer 1996-2008
*                                                  florian.balmer@gmail.com
*                                               http://www.flos-freeware.ch
*
*
******************************************************************************/
#include <windows.h>
#include <commctrl.h>
#include <shlobj.h>
#include <shellapi.h>
#include <shlwapi.h>
#include <commdlg.h>
#include <string.h>
#include "notepad2.h"
#include "scintilla.h"
#include "edit.h"
#include "helpers.h"
#include "dlapi.h"
#include "dialogs.h"
#include "resource.h"


extern HWND  hwndMain;
extern HWND  hwndEdit;
extern HINSTANCE g_hInstance;
extern LPMALLOC  g_lpMalloc;
extern BOOL bSkipUnicodeDetection;
extern BOOL bFixLineEndings;


//=============================================================================
//
//  MsgBox()
//
int MsgBox(int iType,UINT uIdMsg,...)
{

  char szText [256*2];
  char szBuf  [256*2];
  char szTitle[64];
  int iIcon = 0;
  HWND hwnd;

  if (!GetString(uIdMsg,szBuf,COUNTOF(szBuf)))
    return(0);

  wvsprintf(szText,szBuf,(LPVOID)(&uIdMsg + 1));

  GetString(IDS_APPTITLE,szTitle,COUNTOF(szTitle));

  switch (iType) {
    case MBINFO: iIcon = MB_ICONEXCLAMATION; break;
    case MBWARN: iIcon = MB_ICONEXCLAMATION; break;
    case MBYESNO: iIcon = MB_ICONEXCLAMATION | MB_YESNO; break;
    case MBYESNOCANCEL: iIcon = MB_ICONEXCLAMATION | MB_YESNOCANCEL; break;
    case MBYESNOWARN: iIcon = MB_ICONEXCLAMATION | MB_YESNO; break;
    case MBOKCANCEL: iIcon = MB_ICONEXCLAMATION | MB_OKCANCEL; break;
  }

  if (!(hwnd = GetFocus()))
    hwnd = hwndMain;

  return MessageBoxEx(hwnd,
           szText,szTitle,
           MB_SETFOREGROUND | iIcon,
           MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT));

}


//=============================================================================
//
//  DisplayCmdLineHelp()
//
void DisplayCmdLineHelp()
{
  MSGBOXPARAMS mbp;

  char szTitle[32];
  char szText[1024];

  GetString(IDS_APPTITLE,szTitle,COUNTOF(szTitle));
  GetString(IDS_CMDLINEHELP,szText,COUNTOF(szText));

  mbp.cbSize = sizeof(MSGBOXPARAMS);
  mbp.hwndOwner = NULL;
  mbp.hInstance = g_hInstance;
  mbp.lpszText = szText;
  mbp.lpszCaption = szTitle;
  mbp.dwStyle = MB_OK | MB_USERICON | MB_SETFOREGROUND;
  mbp.lpszIcon = MAKEINTRESOURCE(IDR_MAINWND);
  mbp.dwContextHelpId = 0;
  mbp.lpfnMsgBoxCallback = NULL;
  mbp.dwLanguageId = MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL);

  MessageBoxIndirect(&mbp);
}


//=============================================================================
//
//  BFFCallBack()
//
int CALLBACK BFFCallBack(HWND hwnd,UINT umsg,LPARAM lParam,LPARAM lpData)
{
  if (umsg == BFFM_INITIALIZED)
    SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData);

  return(0);

  lParam;
}


//=============================================================================
//
//  GetDirectory()
//
BOOL GetDirectory(HWND hwndParent,int iTitle,LPSTR pszFolder,LPCSTR pszBase,BOOL bNewDialogStyle)
{

  BROWSEINFO bi;
  LPITEMIDLIST pidl;
  //LPMALLOC lpMalloc;
  char szTitle[256];
  char szBase[MAX_PATH];
  BOOL fOk = FALSE;

  lstrcpy(szTitle,"");
  GetString(iTitle,szTitle,COUNTOF(szTitle));

  if (!pszBase || !*pszBase)
    GetCurrentDirectory(MAX_PATH,szBase);
  else
    lstrcpy(szBase,pszBase);

  bi.hwndOwner = hwndParent;
  bi.pidlRoot = NULL;
  bi.pszDisplayName = pszFolder;
  bi.lpszTitle = szTitle;
  bi.ulFlags = BIF_RETURNONLYFSDIRS;
  if (bNewDialogStyle)
    bi.ulFlags |= BIF_NEWDIALOGSTYLE;
  bi.lpfn = &BFFCallBack;
  bi.lParam = (LPARAM)szBase;
  bi.iImage = 0;

  //if (SHGetMalloc(&lpMalloc) != NOERROR)
  //   return FALSE;

  pidl = SHBrowseForFolder(&bi);
  if (pidl)
  {
    SHGetPathFromIDList(pidl,pszFolder);

    g_lpMalloc->lpVtbl->Free(g_lpMalloc,pidl);

    fOk = TRUE;
  }
  //lpMalloc->lpVtbl->Release(lpMalloc);

  return fOk;

}


//=============================================================================
//
//  AboutDlgProc()
//
static const DWORD dwVerMajor    = 2;
static const DWORD dwVerMinor    = 1;
static const DWORD dwBuildNumber = 19;

BOOL CALLBACK AboutDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{

  static HFONT hFontTitle;

  static BOOL hover_email;
  static BOOL capture_email;
  static BOOL hover_webpage;
  static BOOL capture_webpage;

  static HFONT hFontNormal;
  static HFONT hFontHover;

  static HCURSOR hCursorNormal;
  static HCURSOR hCursorHover;

  switch(umsg)
  {
    case WM_INITDIALOG:
      {
        char  szVersion[64];
        LOGFONT lf;

        wsprintf(szVersion,"Notepad2 %u.%u.%0.2u",dwVerMajor,dwVerMinor,dwBuildNumber);
        SetDlgItemText(hwnd,IDC_VERSION,szVersion);

        if (hFontTitle == NULL) {
          if (NULL == (hFontTitle = (HFONT)SendDlgItemMessage(hwnd,IDC_VERSION,WM_GETFONT,0,0)))
            hFontTitle = GetStockObject(DEFAULT_GUI_FONT);
          GetObject(hFontTitle,sizeof(LOGFONT),&lf);
          lf.lfWeight = FW_BOLD;
          hFontTitle = CreateFontIndirect(&lf);
        }

        hover_email = FALSE;
        capture_email = FALSE;
        hover_webpage = FALSE;
        capture_webpage = FALSE;

        //  Font setup
        if (NULL == (hFontHover = (HFONT)SendDlgItemMessage(hwnd,IDC_EMAIL,WM_GETFONT,0,0)))
          hFontHover = GetStockObject(DEFAULT_GUI_FONT);
        GetObject(hFontHover,sizeof(LOGFONT),&lf);
        lf.lfUnderline = TRUE;
        hFontNormal = CreateFontIndirect(&lf);

        //  Cursor setup
        hCursorNormal = LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW));
        if (!(hCursorHover = LoadCursor(NULL,MAKEINTRESOURCE(IDC_HAND))))
          hCursorHover  = LoadCursor(g_hInstance,MAKEINTRESOURCE(IDC_HOVER));

        CenterDlgInParent(hwnd);
      }
      return TRUE;

    case WM_NCACTIVATE:
      if (!(BOOL)wParam) { //  we're not active, clear hover states
        hover_email = FALSE;
        capture_email = FALSE;
        hover_webpage = FALSE;
        capture_webpage = FALSE;
        InvalidateRect(GetDlgItem(hwnd,IDC_EMAIL),NULL,FALSE);
        InvalidateRect(GetDlgItem(hwnd,IDC_WEBPAGE),NULL,FALSE);
      }
      return FALSE;

    case WM_CTLCOLORSTATIC:
      {
        DWORD dwId = GetWindowLong((HWND)lParam,GWL_ID);
        HDC hdc = (HDC)wParam;

        if (dwId == IDC_VERSION) {
          SetBkMode(hdc,TRANSPARENT);
          SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
          SelectObject(hdc,hFontTitle);
          return(LONG)GetSysColorBrush(COLOR_BTNFACE);
        }

        if (dwId == IDC_EMAIL || dwId == IDC_WEBPAGE) {

          SetBkMode(hdc,TRANSPARENT);

          if (GetSysColorBrush(26/*COLOR_HOTLIGHT*/))
            SetTextColor(hdc,GetSysColor(26/*COLOR_HOTLIGHT*/));
          else
            SetTextColor(hdc,RGB(0,0,255));

          if (dwId == IDC_EMAIL)
            SelectObject(hdc,hover_email?hFontHover:hFontNormal);
          else
            SelectObject(hdc,hover_webpage?hFontHover:hFontNormal);

          return(LONG)GetSysColorBrush(COLOR_BTNFACE);
        }
      }
      break;

    case WM_MOUSEMOVE:
      {
        POINT pt = { LOWORD(lParam), HIWORD(lParam) };
        HWND hwndHover = ChildWindowFromPoint(hwnd,pt);
        DWORD dwId = GetWindowLong(hwndHover,GWL_ID);

        if (GetActiveWindow() == hwnd) {

          if (wParam & MK_LBUTTON && !capture_email && !capture_webpage) {
            ;
          }

          else if (hover_email != (dwId == IDC_EMAIL) && !capture_webpage) {
            hover_email = !hover_email;
            InvalidateRect(GetDlgItem(hwnd,IDC_EMAIL),NULL,FALSE);
          }

          else if (hover_webpage != (dwId == IDC_WEBPAGE) && !capture_email) {
            hover_webpage = !hover_webpage;
            InvalidateRect(GetDlgItem(hwnd,IDC_WEBPAGE),NULL,FALSE);
          }

          SetCursor((hover_email || hover_webpage)?hCursorHover:hCursorNormal);
        }
      }
      break;

    case WM_LBUTTONDOWN:
      {
        POINT pt = { LOWORD(lParam), HIWORD(lParam) };
        HWND hwndHover = ChildWindowFromPoint(hwnd,pt);
        DWORD dwId = GetWindowLong(hwndHover,GWL_ID);

        if (dwId == IDC_EMAIL) {
          GetCapture();
          hover_email = TRUE;
          capture_email = TRUE;
          InvalidateRect(GetDlgItem(hwnd,IDC_EMAIL),NULL,FALSE);
        }

        else if (dwId == IDC_WEBPAGE) {
          GetCapture();
          hover_webpage = TRUE;
          capture_webpage = TRUE;
          InvalidateRect(GetDlgItem(hwnd,IDC_WEBPAGE),NULL,FALSE);
        }

        SetCursor((hover_email || hover_webpage)?hCursorHover:hCursorNormal);
      }
      break;

    case WM_LBUTTONUP:
      {
        POINT pt = { LOWORD(lParam), HIWORD(lParam) };
        HWND hwndHover = ChildWindowFromPoint(hwnd,pt);
        DWORD dwId = GetWindowLong(hwndHover,GWL_ID);

        if (capture_email || capture_webpage) {
            ReleaseCapture();

          if (dwId == IDC_EMAIL && capture_email) {
            ShellExecute(hwnd,"open","mailto:florian.balmer@gmail.com",NULL,NULL,SW_SHOWNORMAL);
          }

          else if (dwId == IDC_WEBPAGE && capture_webpage) {
            ShellExecute(hwnd,"open","http://www.flos-freeware.ch",NULL,NULL,SW_SHOWNORMAL);
          }

          capture_email = FALSE;
          capture_webpage = FALSE;
        }
        SetCursor((hover_email || hover_webpage)?hCursorHover:hCursorNormal);
      }
      break;

    case WM_CANCELMODE:
      if (capture_email || capture_webpage) {
        ReleaseCapture();
        hover_email = FALSE;
        capture_email = FALSE;
        hover_webpage = FALSE;
        capture_webpage = FALSE;
        SetCursor(hCursorNormal);
      }
      break;

    case WM_COMMAND:

      switch(LOWORD(wParam))
      {
        case IDOK:
        case IDCANCEL:
          EndDialog(hwnd,IDOK);
          break;
      }
      return TRUE;
  }
  return FALSE;
}


//=============================================================================
//
//  RunDlgProc()
//
BOOL CALLBACK RunDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{

  switch(umsg)
  {

    case WM_INITDIALOG:
      {
        MakeBitmapButton(hwnd,IDC_SEARCHEXE,g_hInstance,IDB_OPEN);

        SendDlgItemMessage(hwnd,IDC_COMMANDLINE,EM_LIMITTEXT,MAX_PATH - 1,0);
        SetDlgItemText(hwnd,IDC_COMMANDLINE,(LPCSTR)lParam);
        SHAutoComplete(GetDlgItem(hwnd,IDC_COMMANDLINE),SHACF_FILESYSTEM);

        CenterDlgInParent(hwnd);
      }
      return TRUE;


    case WM_COMMAND:

      switch(LOWORD(wParam))
      {

        case IDC_SEARCHEXE:
          {
            char szArgs[MAX_PATH];
            char szArg2[MAX_PATH];
            char szFile[MAX_PATH * 2];
            char szFilter[256];
            OPENFILENAME ofn;
            ZeroMemory(&ofn,sizeof(OPENFILENAME));

            GetDlgItemText(hwnd,IDC_COMMANDLINE,szArgs,COUNTOF(szArgs));
            ExpandEnvironmentStringsEx(szArgs,COUNTOF(szArgs));
            ExtractFirstArgument(szArgs,szFile,szArg2);

            GetString(IDS_FILTER_EXE,szFilter,COUNTOF(szFilter));
            PrepareFilterStr(szFilter);

            ofn.lStructSize = sizeof(OPENFILENAME);
            ofn.hwndOwner = hwnd;
            ofn.lpstrFilter = szFilter;
            ofn.lpstrFile = szFile;
            ofn.nMaxFile = COUNTOF(szFile);
            ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | /*OFN_DONTADDTORECENT*/0x02000000
                      | OFN_PATHMUSTEXIST | OFN_SHAREAWARE | OFN_NODEREFERENCELINKS;

            if (GetOpenFileName(&ofn)) {
              PathQuoteSpaces(szFile);
              if (lstrlen(szArg2))
              {
                lstrcat(szFile," ");
                lstrcat(szFile,szArg2);
              }
              SetDlgItemText(hwnd,IDC_COMMANDLINE,szFile);
            }

            PostMessage(hwnd,WM_NEXTDLGCTL,1,0);
          }
          break;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -