自己动手让Visual Studio的Win32向导支持生成对话框程序

Visual Studio的MFC向导可以生成基于对话框的程序,而win32向导却不支持,是不是很不给力呢?虽然VAX可以直接插入对话框的代码段,但还是没有直接生成来得爽,下面就动手来改造吧。

本文所做的修改仅在自己的VS里测试通过,大家修改之前请备份原文件。

那我们需要改什么呢?看图吧。

自己动手让Visual Studio的Win32向导支持生成对话框程序

首先,找到"VS安装目录\VC\VCWizards\AppWiz\Generic\Application\",如我电脑上的目录就是

"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\AppWiz\Generic\Application\"

这个目录下就是Win向导的文件了,有四个文件夹,分别是:

自己动手让Visual Studio的Win32向导支持生成对话框程序

不同语言版本的VS,这些目录下会有不同名字的文件夹,都是按LCID来命名,关于LCID,可以参考http://msdn.microsoft.com/en-us/library/ms912047(WinEmbedded.10).aspx

例如英文版的LCID就是1033,简体中文的就是2052。

html\1033目录下有两个htm文件,AppSettings.htm、和Default.htm,这里先修改AppSettings.htm,

我这里用DW打开AppSettings.htm,然后定位到35行,按下图插入代码:

自己动手让Visual Studio的Win32向导支持生成对话框程序

这一段就是定义了顶部的图片,依样画葫芦,插入的代码内容如下:

[html] view plaincopy
 
  1. <DIV CLASS="SMALL" ID="WIN_DLG_APP_IMAGE" STYLE="DISPLAY:NONE;">  
  2.  <IMG CLASS="SMALL" SRC="..\..\Images\Dialog.gif" ALT="" BORDER="0">  
  3. </DIV>  

 

这里我为了偷懒,直接将

"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\AppWiz\MFC\Application\images\Dialog.gif"

复制到

"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\AppWiz\Generic\Application\images\"目录下。

接着,定位到197行,按图插入代码:

自己动手让Visual Studio的Win32向导支持生成对话框程序

看到这里懂点html的同学应该知道了吧?这里就是向导对话框中那几单选按钮。还是和之前一样,依样画葫芦。插入的代码内容如下:

[html] view plaincopy
 
  1.  <INPUT TYPE="radio" CLASS="Radio" onPropertyChange="InitControls();" NAME="apptype" ID="WIN_DLG_APP" ACCESSKEY="B" TITLE="Creates a dialog-based Windows application. The application files include a <projectname>.cpp file that contains the _tWinMain function, and stdafx.cpp and stdafx.h files that are used to create the precompiled header file.">  
  2.  <DIV CLASS="itemTextRadioB" ID="WIN_DLG_APP_DIV" TITLE="Creates a dialog-based Windows application. The application files include a <projectname>.cpp file that contains the _tWinMain function, and stdafx.cpp and stdafx.h files that are used to create the precompiled header file.">  
  3.  <LABEL FOR="WIN_DLG_APP" ID="WIN_DLG_APP_LABEL">Dialog-<U>b</U>ased windows application</LABEL>  
  4.  </DIV>  
  5.   
  6. <BR>  

 

然后再定位到370行,按图插入代码:

自己动手让Visual Studio的Win32向导支持生成对话框程序

插入的代码如下

[javascript] view plaincopy
 
  1. WIN_DLG_APP.disabled = true;  

然后定位到425行,由于我们是要创建基于对话框的的程序,所以没理由是空项目。。所以这里不需要添加空项目的开关;插入的代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

插入的代码如下:

[javascript] view plaincopy
 
  1. if (WIN_DLG_APP.checked)  
  2. {  
  3.     SUPPORT_ATL.disabled = false;  
  4.     support_atl_title.disabled = false;  
  5. }  

定位到526行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

插入的代码内容如下:

[javascript] view plaincopy
 
  1. if (WIN_DLG_APP.checked)  
  2. {  
  3.     SUPPORT_ATL.disabled = false;  
  4.     support_atl_title.disabled = false;  
  5. }  

定位到第562行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

插入的代码如下

[javascript] view plaincopy
 
  1. WIN_DLG_APP_IMAGE.style.display = ‘none‘;  
[javascript] view plaincopy
 
  1. if (WIN_DLG_APP.checked)  
  2. {  
  3.     WIN_DLG_APP_IMAGE.style.display = ‘block‘;  
  4.     return;  
  5. }  

至此第一个文件修改完了。。好长呐。。。

 继续修改第二个文件default.htm,依然是用DW来打开。定位到11行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

 插入的代码内容:

[html] view plaincopy
 
  1. <SYMBOL NAME="WIN_DLG_APP" TYPE=checkbox VALUE=false></SYMBOL>  

定位到342行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

顺便吐槽下:微软的coder原来用的是多层嵌套的if。。看着DT。于是我便改成了else if的。。看起来舒服。

插入的代码内容如下:

[javascript] view plaincopy
 
  1. var L_APPTYPEWIN_DLG_TEXT = "Dialog-based windows application";  
[javascript] view plaincopy
 
  1. if (window.external.FindSymbol("DLL_APP"))  
  2. {  
  3.     APPTYPE.innerText = L_APPTYPEDLL_TEXT;  
  4. }  
  5. else if (window.external.FindSymbol("CONSOLE_APP"))  
  6. {  
  7.     APPTYPE.innerText = L_APPTYPECON_TEXT;  
  8. }  
  9. else if (window.external.FindSymbol("LIB_APP"))  
  10. {  
  11.     APPTYPE.innerText = L_APPTYPELIB_TEXT;  
  12. }  
  13. else if (window.external.FindSymbol("WIN_DLG_APP"))  
  14. {  
  15.     APPTYPE.innerText = L_APPTYPEWIN_DLG_TEXT;  
  16. }  
  17. else   
  18. {  
  19.     APPTYPE.innerText = L_APPTYPEWIN_TEXT;  
  20. }  

hoho,第二个文件改好了。

此时打开向导就可以看到已经添加好了,剩下的就是修改代码模板了,继续吧。

打开"scripts\1033\default.js",定位到96行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

插入代码如下:

[javascript] view plaincopy
 
  1. <span style="white-space:pre">  </span>if (wizard.FindSymbol("CONSOLE_APP"))  
  2.         {  
  3.             strAppType = "CONSOLE";  
  4.         }  
  5.         else if (wizard.FindSymbol("WIN_APP"))  
  6.         {  
  7.             strAppType = "WIN";  
  8.         }  
  9.         else if (wizard.FindSymbol("WIN_DLG_APP"))  
  10.         {  
  11.             strAppType = "WIN_DLG";  
  12.         }  
  13.         else if (wizard.FindSymbol("DLL_APP"))  
  14.         {  
  15.             strAppType = "DLL";  
  16.         }  
  17.         else if (wizard.FindSymbol("LIB_APP"))  
  18.         {  
  19.             strAppType = "LIB";  
  20.         }  

然后再定位到176行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

插入代码内容如下:

[javascript] view plaincopy
 
  1. case "WIN_DLG":  

定位到192行,插入代码如图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

然后再定位到241行和261行做同样的修改。又改完一个文件了。。。。

找到"templates\1033"目录,打开readme.txt,分别定位到22行、73行、88行分别修改成如下文本:

22行:

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP]  

73行:

 

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP || SUPPORT_MFC]  

 

88行:

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP]  

这个文件就完事了,下一个文件resource.h

将6-17行替换成如下代码:

[cpp] view plaincopy
 
  1. [!if !WIN_DLG_APP]  
  2. #define IDS_APP_TITLE            103  
  3. [!endif]  
  4.   
  5. [!if WIN_APP || WIN_DLG_APP]  
  6. [!if WIN_APP]  
  7. #define IDR_MAINFRAME            128  
  8. #define IDD_ABOUTBOX            103  
  9. #define IDM_ABOUT                104  
  10. #define IDM_EXIT                105  
  11. #define IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]            109  
  12. #define IDC_MYICON                2  
  13. [!endif]  
  14. #define IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG    102  
  15. #define IDI_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]            107  
  16. #define IDI_SMALL                108  

接下来需要先在这个目录下创建一个文件,名为"CmnHdr.h",这个头文件的代码如下:

[cpp] view plaincopy
 
  1. #pragma once   // Include this header file once per compilation unit  
  2.   
  3. /////////////////////////// chHANDLE_DLGMSG Macro /////////////////////////////  
  4.   
  5.   
  6. // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog  
  7. // boxes because DlgProc returns a BOOL instead of an LRESULT (like  
  8. // WndProcs). This chHANDLE_DLGMSG macro corrects the problem:  
  9. #define chHANDLE_DLGMSG(hWnd, message, fn)                 \  
  10.    case (message): return (SetDlgMsgResult(hWnd, uMsg,     \  
  11.    HANDLE_##message((hWnd), (wParam), (lParam), (fn))))  
  12.   
  13.   
  14. //////////////////////// Dialog Box Icon Setting Macro ////////////////////////  
  15.   
  16.   
  17. // Sets the dialog box icons  
  18. inline void chSETDLGICONS(HWND hWnd, int idi) {  
  19.     SendMessage(hWnd, WM_SETICON, ICON_BIG,  (LPARAM)   
  20.         LoadIcon((HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),   
  21.         MAKEINTRESOURCE(idi)));  
  22.     SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)   
  23.         LoadIcon((HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),   
  24.         MAKEINTRESOURCE(idi)));  
  25. }  

看过《Windows 核心编程》的都应该见过上面这段代码吧。作用我就不解释了。

接着修改root.cpp,这个文件里就引用到了刚才上一步添加的头文件,定位到第4行和第13行,修改成如下代码:

4行:

 

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP]  

13行:

 

[cpp] view plaincopy
 
  1. [!if WIN_APP || SUPPORT_MFC || WIN_DLG_APP]  

然后再定位240行,在[!else]之后插入如下代码:

[cpp] view plaincopy
 
  1. [!if WIN_DLG_APP]  
  2. #include "CmnHdr.h"  
  3.   
  4. // Global Variables:  
  5. const TCHAR g_szAppName[] = _T("[!output PROJECT_NAME]");    // The application title text  
  6.   
  7. // Forward declarations of functions included in this code module:  
  8. INT_PTR CALLBACK Dlg_Proc(HWND, UINT, WPARAM, LPARAM);  
  9. BOOL Dlg_OnInitDialog(HWND, HWND, LPARAM);  
  10. void Dlg_OnCommand(HWND, int, HWND, UINT);  
  11.   
  12. // entry function  
  13. int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,  
  14.                        _In_opt_ HINSTANCE hPrevInstance,  
  15.                        _In_ LPTSTR    lpCmdLine,  
  16.                        _In_ int       nCmdShow)  
  17. {  
  18.     UNREFERENCED_PARAMETER(hPrevInstance);  
  19.     INT_PTR nResult = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG),   
  20.         NULL, Dlg_Proc, _ttoi(lpCmdLine));  
  21.     return nResult;  
  22. }  
  23.   
  24. //  
  25. //  FUNCTION: Dlg_Proc(HWND, UINT, WPARAM, LPARAM)  
  26. //  
  27. //  PURPOSE:  Message handler for Dialog box  
  28. //  
  29. INT_PTR CALLBACK Dlg_Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)  
  30. {  
  31.     switch (uMsg)  
  32.     {  
  33.         chHANDLE_DLGMSG(hwndDlg, WM_INITDIALOG, Dlg_OnInitDialog);  
  34.         chHANDLE_DLGMSG(hwndDlg, WM_COMMAND, Dlg_OnCommand);  
  35.     }  
  36.     return FALSE;  
  37. }  
  38.   
  39. //  
  40. //  FUNCTION: Dlg_OnInitDialog(HWND, HWND, LPARAM)  
  41. //  
  42. //  PURPOSE:  Initialize the dialog box.  
  43. //  
  44. BOOL Dlg_OnInitDialog(HWND hwndDlg, HWND hwndFocus, LPARAM lParam)  
  45. {  
  46.     // Sets the dialog box icons  
  47.     chSETDLGICONS(hwndDlg, IDI_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]);  
  48.     return TRUE;  
  49. }  
  50.   
  51. //  
  52. //  FUNCTION: Dlg_OnCommand(HWND, int, HWND, UINT)  
  53. //  
  54. //  PURPOSE:  Command message handler for dialog box  
  55. //  
  56. void Dlg_OnCommand(HWND hwndDlg, int id, HWND hwndCtl, UINT codeNotify)  
  57. {  
  58.     switch (id)  
  59.     {  
  60.     case IDOK:  
  61.     case IDCANCEL:  
  62.         EndDialog(hwndDlg, id);  
  63.         break;  
  64.     default:break;  
  65.     }  
  66. }  
  67. [!endif]  

又一文件改好,继续下一个文件stdafx.h,将38行-43行的内容替换成如下的代码:

[cpp] view plaincopy
 
  1. [!if DLL_APP || WIN_APP || WIN_DLG_APP]  
  2. // Windows Header Files:  
  3. #include <windows.h>  
  4. [!endif]  
  5. [!if WIN_DLG_APP]  
  6. // Message Crackers, Child Control Macros, and API Macros Header file:  
  7. #include <Windowsx.h>  
  8. [!endif]  
  9. [!if WIN_APP || WIN_DLG_APP]  

然后在文件末尾加上下面这段代码:

[cpp] view plaincopy
 
  1. #ifdef _UNICODE  
  2. #if defined _M_IX86  
  3. #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘x86‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")  
  4. #elif defined _M_X64  
  5. #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘amd64‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")  
  6. #else  
  7. #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘*‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")  
  8. #endif  
  9. #endif  

 

目的是为了在UNICODE环境下支持XP/Vista/Win7的样式.

然后再修改下一个文件,Templates.inf,将13行、17行、24行修改成如下代码:

13行:

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP || SUPPORT_MFC]  

17行:

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP || SUPPORT_MFC]  

24行:

[cpp] view plaincopy
 
  1. [!if WIN_APP || WIN_DLG_APP]  

 

然后再定位18行,在这行后面加上CmnHdr.h,这样在创建时就会自动把这个文件复制到工程目录下。

最后一个要修改的文件,root.rc,这是一个资源脚本文件,为了方便,我调整了代码结构,这里将整个文件的代码发出来:

[cpp] view plaincopy
 
  1. //Microsoft Visual C++ generated resource script.  
  2. //  
  3. #include "resource.h"  
  4.   
  5. #define APSTUDIO_READONLY_SYMBOLS  
  6. /////////////////////////////////////////////////////////////////////////////  
  7. //  
  8. // Generated from the TEXTINCLUDE 2 resource.  
  9. //  
  10. [!if WIN_APP || WIN_DLG_APP]  
  11. #ifndef APSTUDIO_INVOKED  
  12. #include "targetver.h"  
  13. #endif  
  14. #define APSTUDIO_HIDDEN_SYMBOLS  
  15. #include "windows.h"  
  16. #undef APSTUDIO_HIDDEN_SYMBOLS  
  17. [!else]  
  18. #include "afxres.h"  
  19. [!endif]  
  20. /////////////////////////////////////////////////////////////////////////////  
  21. #undef APSTUDIO_READONLY_SYMBOLS  
  22.   
  23. #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_[!output LANG_SUFFIX])  
  24. LANGUAGE [!output PRIMARY_LANG_ID], [!output SUB_LANG_ID]  
  25.   
  26. [!if WIN_APP || WIN_DLG_APP]  
  27. /////////////////////////////////////////////////////////////////////////////  
  28. //  
  29. // Icon  
  30. //  
  31.   
  32. // Icon with lowest ID value placed first to ensure application icon  
  33. // remains consistent on all systems.  
  34.   
  35. IDI_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]       ICON         "[!output PROJECT_NAME].ico"  
  36. IDI_SMALL               ICON         "small.ico"  
  37. [!if WIN_DLG_APP]  
  38.   
  39. /////////////////////////////////////////////////////////////////////////////  
  40. //  
  41. // DESIGNINFO  
  42. //  
  43.   
  44. #ifdef APSTUDIO_INVOKED  
  45. GUIDELINES DESIGNINFO  
  46. BEGIN  
  47.     IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG, DIALOG  
  48.     BEGIN  
  49.         LEFTMARGIN, 7  
  50.         RIGHTMARGIN, 313  
  51.         TOPMARGIN, 7  
  52.         BOTTOMMARGIN, 193  
  53.     END  
  54. END  
  55. #endif    // APSTUDIO_INVOKED  
  56.   
  57. /////////////////////////////////////////////////////////////////////////////  
  58. //  
  59. // Dialog  
  60. //  
  61.   
  62. IDD_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]_DIALOG DIALOGEX 0, 0, 320, 200  
  63. STYLE DS_SETFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME  
  64. EXSTYLE WS_EX_APPWINDOW  
  65. CAPTION "[!output PROJECT_NAME]"  
  66. FONT 8, "MS Shell Dlg"  
  67. BEGIN  
  68.     DEFPUSHBUTTON   "OK",IDOK,209,179,50,14  
  69.     PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14  
  70.     CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8  
  71. END  
  72.   
  73. [!else]  
  74. /////////////////////////////////////////////////////////////////////////////  
  75. //  
  76. // Menu  
  77. //  
  78.   
  79. IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME] MENU  
  80. BEGIN  
  81.     POPUP "&File"  
  82.     BEGIN  
  83.         MENUITEM "E&xit",                IDM_EXIT  
  84.     END  
  85.     POPUP "&Help"  
  86.     BEGIN  
  87.         MENUITEM "&About ...",           IDM_ABOUT  
  88.     END  
  89. END  
  90.   
  91.   
  92. /////////////////////////////////////////////////////////////////////////////  
  93. //  
  94. // Accelerator  
  95. //  
  96.   
  97. IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME] ACCELERATORS  
  98. BEGIN  
  99.     "?",            IDM_ABOUT,              ASCII,  ALT  
  100.     "/",            IDM_ABOUT,              ASCII,  ALT  
  101. END  
  102.   
  103. /////////////////////////////////////////////////////////////////////////////  
  104. //  
  105. // String Table  
  106. //  
  107.   
  108. STRINGTABLE  
  109. BEGIN  
  110.    IDC_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]   "[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME]"  
  111.    IDS_APP_TITLE       "[!output PROJECT_NAME]"  
  112. END  
  113.   
  114. /////////////////////////////////////////////////////////////////////////////  
  115. //  
  116. // Dialog  
  117. //  
  118.   
  119. IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62  
  120. STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU  
  121. CAPTION "About [!output PROJECT_NAME]"  
  122. FONT [!output DLG_FONT_SIZE], "[!output DLG_FONT_NAME]"  
  123. BEGIN  
  124.     ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20  
  125.     LTEXT           "[!output PROJECT_NAME], Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX  
  126.     LTEXT           "Copyright (C) [!output YEAR]",IDC_STATIC,42,26,114,8  
  127.     DEFPUSHBUTTON   "OK",IDOK,113,41,50,14,WS_GROUP  
  128. END  
  129.   
  130. /////////////////////////////////////////////////////////////////////////////  
  131. //  
  132. // DESIGNINFO  
  133. //  
  134.   
  135. #ifdef APSTUDIO_INVOKED  
  136. GUIDELINES DESIGNINFO  
  137. BEGIN  
  138.     IDD_ABOUTBOX, DIALOG  
  139.     BEGIN  
  140.         LEFTMARGIN, 7  
  141.         RIGHTMARGIN, 163  
  142.         TOPMARGIN, 7  
  143.         BOTTOMMARGIN, 55  
  144.     END  
  145. END  
  146. #endif    // APSTUDIO_INVOKED  
  147. [!endif]  
  148. #ifdef APSTUDIO_INVOKED  
  149. /////////////////////////////////////////////////////////////////////////////  
  150. //  
  151. // TEXTINCLUDE  
  152. //  
  153.  TEXTINCLUDE  
  154. BEGIN  
  155.     "resource.h\0"  
  156. END  
  157.  TEXTINCLUDE  
  158. BEGIN  
  159.     "#ifndef APSTUDIO_INVOKED\r\n"  
  160.     "#include ""targetver.h""\r\n"  
  161.     "#endif\r\n"  
  162.     "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"  
  163.     "#include ""windows.h""\r\n"  
  164.     "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"  
  165.     "\0"  
  166. END  
  167.  TEXTINCLUDE  
  168. BEGIN  
  169.     "\r\n"  
  170.     "\0"  
  171. END  
  172.   
  173. #endif    // APSTUDIO_INVOKED  
  174.   
  175.   
  176. [!else]  
  177.   
  178. #ifdef APSTUDIO_INVOKED  
  179. /////////////////////////////////////////////////////////////////////////////  
  180. //  
  181. // TEXTINCLUDE  
  182. //  
  183.  TEXTINCLUDE  
  184. BEGIN  
  185.     "resource.h\0"  
  186. END  
  187.  TEXTINCLUDE  
  188. BEGIN  
  189.     "#include ""afxres.h""\r\n"  
  190.     "\0"  
  191. END  
  192.  TEXTINCLUDE  
  193. BEGIN  
  194.     "\r\n"  
  195.     "\0"  
  196. END  
  197.   
  198. #endif    // APSTUDIO_INVOKED  
  199.   
  200. /////////////////////////////////////////////////////////////////////////////  
  201. //  
  202. // String Table  
  203. //  
  204.   
  205. STRINGTABLE  
  206. BEGIN  
  207.    IDS_APP_TITLE       "[!output PROJECT_NAME]"  
  208. END  
  209.   
  210. [!endif]  
  211. #endif  
  212. /////////////////////////////////////////////////////////////////////////////  
  213.   
  214.   
  215.   
  216. #ifndef APSTUDIO_INVOKED  
  217. /////////////////////////////////////////////////////////////////////////////  
  218. //  
  219. // Generated from the TEXTINCLUDE 3 resource.  
  220. //  
  221. [!if SUPPORT_MFC]  
  222. #ifndef _AFXDLL  
  223. #include "[!output MFC_RC_INCLUDE_PREFIX]afxres.rc"  
  224. #endif  
  225. [!endif]  
  226.   
  227. /////////////////////////////////////////////////////////////////////////////  
  228. #endif    // not APSTUDIO_INVOKED  

 

终于修改完成了,赶紧创建一个新项目试试吧。。。

测试截图:

自己动手让Visual Studio的Win32向导支持生成对话框程序

自己动手让Visual Studio的Win32向导支持生成对话框程序

自己动手让Visual Studio的Win32向导支持生成对话框程序

下面提供两份已经改好的文件,直接覆盖即可:

VS2010英文旗舰版:Generic_for_VS10.7z

VS2012英文旗舰版:Generic_for_VS11.7z

以上两份均测试通过,其他版本请自行修改测试。

欢迎转载本文章,但请标明出处,原文地址:
http://www.cnblogs.com/hwangbae/archive/2012/07/26/2610469.html

自己动手让Visual Studio的Win32向导支持生成对话框程序

上一篇:Windows是怎样被激活的?


下一篇:FindWindow使用方法