  | 
      
        
          3楼
          巨大八爪鱼
          2015-12-3 21:48
          
          
           
         
        【程序】 在Win32Project1.cpp中包含头文件: #include "RenameDlg.h"
  然后在WndProc函数中的case WM_COMMAND:的switch (wmId)下,添加如下分支代码: case ID_FILE_RENAME: case ID_ACCELERATOR32775:     RenameDlg_Show(hInst, hWnd);     break; 其中第一个是菜单项的ID,第二个是快捷键的ID。这两个自己去资源文件里添加,ID都是用的默认的。
  
       | 
    
    
        | 
      
        
          4楼
          巨大八爪鱼
          2015-12-3 21:49
          
          
           
         
        【头文件:RenameDlg.h】 void RenameDlg_Show(HINSTANCE hInst, HWND hWnd); INT_PTR CALLBACK RenameDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); void RenameDlg_Init(HWND hDlg); void LoadRD(); void SaveRD(); void RenameDlg_UpdateCtrls();
  
       | 
    
    
        | 
      
        
          5楼
          巨大八爪鱼
          2015-12-3 21:49
          
          
           
         
        【源文件:RenameDlg.cpp】 #include "stdafx.h" #include <stdio.h> #include <Windows.h> #include "RenameDlg.h" #include "resource.h"
  #define RD_FILE "rdf.dat" #define RD_MAXCNT 255
  struct RenameData {     wchar_t str_zhcn[RD_MAXCNT];     wchar_t str_zhtw[RD_MAXCNT];     int autoConversion;     int autoCorrection; } rd;
  struct {     HWND edit1;     HWND edit2;     HWND combo1;     HWND check1; } ctrls;
  const wchar_t *combo1_items[] = {L"No conversion", L"From Simplified Chinese", L"From Traditional Chinese", NULL};
  void RenameDlg_Show(HINSTANCE hInst, HWND hWnd) {     DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, RenameDlg); }
  INT_PTR CALLBACK RenameDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {     int wmId = LOWORD(wParam);     int wmEvent = HIWORD(wParam);     switch (message)     {     case WM_INITDIALOG:         RenameDlg_Init(hDlg);         return (INT_PTR)TRUE;     case WM_COMMAND:         switch (wmId)         {         case IDOK:             SaveRD();         case IDCANCEL:             EndDialog(hDlg, wmId);             return (INT_PTR)TRUE;         case IDC_COMBO1:             if (wmEvent == CBN_SELCHANGE)                 RenameDlg_UpdateCtrls();             break;         }         break;     }     return (INT_PTR)FALSE; }
  void RenameDlg_Init(HWND hDlg) {     int i;     ctrls.edit1 = GetDlgItem(hDlg, IDC_EDIT1);     ctrls.edit2 = GetDlgItem(hDlg, IDC_EDIT2);     ctrls.combo1 = GetDlgItem(hDlg, IDC_COMBO1);     ctrls.check1 = GetDlgItem(hDlg, IDC_CHECK1);     for (i = 0; combo1_items[i] != NULL; i++)         SendMessage(ctrls.combo1, CB_ADDSTRING, NULL, (LPARAM)combo1_items[i]);     LoadRD(); }
  void LoadRD() {     FILE *fp;     fopen_s(&fp, RD_FILE, "r");     if (fp == NULL)     {         SendMessage(ctrls.combo1, CB_SETCURSEL, (WPARAM)0, NULL);         return;     }     fread(&rd, sizeof(rd), 1, fp);     fclose(fp);
      SetWindowText(ctrls.edit1, rd.str_zhcn);     SetWindowText(ctrls.edit2, rd.str_zhtw);     SendMessage(ctrls.combo1, CB_SETCURSEL, (WPARAM)rd.autoConversion, NULL);     rd.autoCorrection = SendMessage(ctrls.check1, BM_SETCHECK, (WPARAM)rd.autoCorrection, NULL);     RenameDlg_UpdateCtrls(); }
  void SaveRD() {     FILE *fp;     fopen_s(&fp, RD_FILE, "w");     GetWindowText(ctrls.edit1, rd.str_zhcn, RD_MAXCNT);     GetWindowText(ctrls.edit2, rd.str_zhtw, RD_MAXCNT);     rd.autoConversion = SendMessage(ctrls.combo1, CB_GETCURSEL, NULL, NULL);     rd.autoCorrection = SendMessage(ctrls.check1, BM_GETCHECK, NULL, NULL);     fwrite(&rd, sizeof(rd), 1, fp);     fclose(fp); }
  void RenameDlg_UpdateCtrls() {     int ac = SendMessage(ctrls.combo1, CB_GETCURSEL, NULL, NULL);     EnableWindow(ctrls.edit1, ac != 2);     EnableWindow(ctrls.edit2, ac != 1); }
  
       | 
    
    
        | 
      
        
          6楼
          巨大八爪鱼
          2015-12-3 21:52
          
          
           
         
        【参考:Win32Project1.rc资源文件】 【菜单部分】 ///////////////////////////////////////////////////////////////////////////// // // Menu //
  IDC_WIN32PROJECT1 MENU BEGIN     POPUP "&File"     BEGIN         MENUITEM "&String Insertion...\tCtrl+S", ID_FILE_SHOWDIALOG         MENUITEM "Rename...\tCtrl+R",           ID_FILE_RENAME         MENUITEM SEPARATOR         MENUITEM "E&xit",                       IDM_EXIT     END     POPUP "&Help"     BEGIN         MENUITEM "&About ...",                  IDM_ABOUT     END END
  【快捷键部分】 ///////////////////////////////////////////////////////////////////////////// // // Accelerator //
  IDC_WIN32PROJECT1 ACCELERATORS BEGIN     "S",            ID_ACCELERATOR32772,    VIRTKEY, CONTROL, NOINVERT     "/",            IDM_ABOUT,              ASCII,  ALT, NOINVERT     "?",            IDM_ABOUT,              ASCII,  ALT, NOINVERT     "R",            ID_ACCELERATOR32775,    VIRTKEY, CONTROL, NOINVERT END
  【Rename对话框】 IDD_DIALOG2 DIALOGEX 0, 0, 309, 134 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Rename" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN     GROUPBOX        "Name for variants",IDC_STATIC,7,7,295,66     LTEXT           "Simplified Chinese:",IDC_STATIC,29,26,60,8     EDITTEXT        IDC_EDIT1,97,24,188,14,ES_AUTOHSCROLL     LTEXT           "Traditional Chinese:",IDC_STATIC,25,48,64,8     EDITTEXT        IDC_EDIT2,97,47,188,14,ES_AUTOHSCROLL     LTEXT           "Auto Conversion:",IDC_STATIC,32,80,57,8     COMBOBOX        IDC_COMBO1,97,78,131,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP     CONTROL         "Auto Correction",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,98,98,67,10     DEFPUSHBUTTON   "OK",IDOK,198,113,50,14     PUSHBUTTON      "Cancel",IDCANCEL,252,113,50,14 END
  
       |