NativeWindow_02_DialogBoxParam_VC6
PS: 代码参考于<<Windows环境下32位汇编语言程序设计.chm>>,第5章,"5.4 对 话 框(2)" 。
ZC: 与CreateWindow(Ex)相比,优点在于:(1)、窗口内容 所见即所得,(2)、写一个基本窗口所用的代码比CreateWindow(Ex)少(只需要写消息回调函数)。
ZC: 与MFC相比,程序的代码少多了。
1、
创建"Win32 Application"的 空工程
PS: 下面的3个文件(WinMain_z.cpp,DialogMain.rc,resource.h),直接复制到工程目录,然后添加到工程,即可。一个简单的窗口测试程序就OK了。
2、
创建源码文件 WinMain_Z.cpp,键入如下代码:
1 #include <windows.h> 2 #include "resource.h" 3 4 HINSTANCE g_hInstance = 0; 5 6 BOOL CALLBACK ProcDialog( 7 HWND _hWnd, // 窗口句柄 8 UINT _uMsg, // 消息ID(identifier) 9 WPARAM _wParam, 10 LPARAM _lParam) 11 { 12 if (WM_CLOSE == _uMsg) 13 { 14 EndDialog(_hWnd,NULL); 15 } 16 else if (WM_INITDIALOG == _uMsg) 17 { 18 //HICON hIcon = LoadIcon(g_hInstance, ICO_MAIN); 19 //SendMessage(_hWnd, WM_SETICON, ICON_BIG, hIcon); 20 } 21 else if (WM_COMMAND == _uMsg) 22 { 23 WORD wLow = LOWORD(_wParam); 24 if (IDOK == wLow) 25 { 26 EndDialog(_hWnd, NULL); 27 } 28 } 29 else 30 { 31 return false; 32 } 33 return true; 34 } 35 36 int WINAPI WinMain( 37 HINSTANCE _hInstance, // 当前 hInstance句柄 38 HINSTANCE _hPrevInstance, // 之前的 hInstance句柄 39 LPSTR _lpCmdLine, // 命令行 40 int _nCmdShow) // 显示状态 41 { 42 g_hInstance = _hInstance; 43 44 DialogBoxParam(_hInstance, (char*)IDD_DIALOG_MAIN, NULL, ProcDialog, NULL); 45 ExitProcess(NULL); 46 return 0; 47 }
3、
资源文件:
3.1、DialogMain_Z.rc
1 //Microsoft Developer Studio 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 #include "afxres.h"// VS2017编译的时候报错,改成 #include "WinResrc.h"。然后,编辑过资源文件,再重新编译,它又变回"afxres.h"了... 11 12 ///////////////////////////////////////////////////////////////////////////// 13 #undef APSTUDIO_READONLY_SYMBOLS 14 15 ///////////////////////////////////////////////////////////////////////////// 16 // Chinese (中国) resources 17 18 #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) 19 #ifdef _WIN32 20 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED 21 #pragma code_page(936) 22 #endif //_WIN32 23 24 ///////////////////////////////////////////////////////////////////////////// 25 // 26 // Dialog 27 // 28 29 IDD_DIALOG_MAIN DIALOG DISCARDABLE 100, 100, 300, 150 30 STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | 31 WS_CAPTION | WS_SYSMENU 32 CAPTION "主对话框" 33 FONT 10, "System" 34 BEGIN 35 DEFPUSHBUTTON "确定",IDOK,243,6,50,14 36 END 37 38 39 ///////////////////////////////////////////////////////////////////////////// 40 // 41 // DESIGNINFO 42 // 43 44 #ifdef APSTUDIO_INVOKED 45 GUIDELINES DESIGNINFO DISCARDABLE 46 BEGIN 47 IDD_DIALOG_MAIN, DIALOG 48 BEGIN 49 LEFTMARGIN, 7 50 RIGHTMARGIN, 293 51 TOPMARGIN, 6 52 BOTTOMMARGIN, 143 53 END 54 END 55 #endif // APSTUDIO_INVOKED 56 57 58 #ifdef APSTUDIO_INVOKED 59 ///////////////////////////////////////////////////////////////////////////// 60 // 61 // TEXTINCLUDE 62 // 63 64 1 TEXTINCLUDE DISCARDABLE 65 BEGIN 66 "resource.h\0" 67 END 68 69 2 TEXTINCLUDE DISCARDABLE 70 BEGIN 71 "#include ""afxres.h""\r\n" 72 "\0" 73 END 74 75 3 TEXTINCLUDE DISCARDABLE 76 BEGIN 77 "\r\n" 78 "\0" 79 END 80 81 #endif // APSTUDIO_INVOKED 82 83 #endif // Chinese (中国) resources 84 ///////////////////////////////////////////////////////////////////////////// 85 86 87 88 #ifndef APSTUDIO_INVOKED 89 ///////////////////////////////////////////////////////////////////////////// 90 // 91 // Generated from the TEXTINCLUDE 3 resource. 92 // 93 94 95 ///////////////////////////////////////////////////////////////////////////// 96 #endif // not APSTUDIO_INVOKED
3.2、resource.h
1 //{{NO_DEPENDENCIES}} 2 // Microsoft Developer Studio generated include file. 3 // Used by DialogMain.rc 4 // 5 #define IDD_DIALOG_MAIN 101 6 7 // Next default values for new objects 8 // 9 #ifdef APSTUDIO_INVOKED 10 #ifndef APSTUDIO_READONLY_SYMBOLS 11 #define _APS_NEXT_RESOURCE_VALUE 102 12 #define _APS_NEXT_COMMAND_VALUE 40001 13 #define _APS_NEXT_CONTROL_VALUE 1000 14 #define _APS_NEXT_SYMED_VALUE 101 15 #endif 16 #endif
ZC: 在最后 RebuildAll 的时候,resource.h文件 会报错:“... ...\resource.h(16) : fatal error RC1004: unexpected end of file found”
ZC: 解决 : 在 resource.h文件 的最后多打几个回车 再 RebuildAll 就OK了。
X