码迷,mamicode.com
首页 > 移动开发 > 详细

Creating Dialogbased Win32 Application (2) / 创建基于对话框的Win32应用程序(二)Button的应用、新建子窗体 / Win32, VC++, Windows

时间:2016-09-18 15:25:27      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

创建基于对话框的Win32应用程序(二) —— Button的应用、新建子窗体

 

  可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的。现在我们来为他们添加退出对话框的功能。

6、首先定义宏替换如下:

 技术分享

7、再在回调函数(Dlg_Proc)中调用响应消息的函数(Dlg_OnCommand)如下:

 技术分享

8、由于HANDLE_WM_COMMAND是在windowsx.h头文件中定义的,故添加其引用。

 技术分享

9、接下来定义刚才调用的消息响应函数(Dlg_OnCommand)如下:

 技术分享

其中IDOK和IDCANCEL分别是按钮OK和Cancel对应的标识符。

10、此时按下F5 Start Debugging,再点击OK或Cancel按钮可以看到新建的对话框将会关闭。

 技术分享

  下面我们演示如何新建子窗体。

11、首先在Solution Explorer或 Resources View 中右键Add Resource,选择Dialog。并在Resources View 中找到新建Dialog,右键Propertise修改相关内容。

 技术分享

技术分享

 

技术分享

技术分享

12、点选并按下Delete键删掉新建子对话框中无用的OK和Cancel按钮。当reasource.h或.cpp文件中存在所删除控件的相关代码时记得一并删除或注释掉。

 技术分享

13、在View中打开Toolbox(Ctrl+Alt+X),添加Static Test控件到新建子窗体中,修改控件内容并调整二者至合适大小。

 技术分享

技术分享

14、找到之前Dialog中的Button按钮,修改其Propertise。

 技术分享

技术分享

技术分享

技术分享

15、切换到 .cpp文件中,修改被调用的消息响应函数(Dlg_OnCommand),在IDNEW的case中调用DialogBoxParam,并编写子对话框的回调函数(NewDlg_Proc)。

 技术分享

技术分享
 1 #include <Windows.h>
 2 #include <windowsx.h>
 3 #include <tchar.h>
 4 #include "Resource.h"
 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 INT_PTR WINAPI NewDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
14     switch (uMsg)
15     {
16     case WM_CLOSE:
17         EndDialog(hWnd, 0);
18         break;
19     }
20 
21     return(FALSE);
22 }
23 
24 void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) {
25 
26     switch (id) {
27     case IDNEW:
28         DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),
29             hWnd, NewDlg_Proc, NULL);
30         break;
31     case IDCANCEL:
32         SendMessage(hWnd, WM_CLOSE, 0, 0);
33         break;
34 
35     }
36 }
37 
38 INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
39     switch (uMsg)
40     {
41     chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
42     case WM_CLOSE:
43         EndDialog(hWnd, 0);
44         break;
45     }
46 
47     return(FALSE);
48 }
49 
50 int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
51     DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),
52         NULL, Dlg_Proc, _ttoi(pszCmdLine));
53     return(0);
54 }
Win32WindowsApplication.cpp

16、此时按下F5 Start Debugging,再点击New按钮,可以看到刚才新建的子对话框。

 技术分享

————————————————

本文为本人原创,转载请注明出处。

Creating Dialogbased Win32 Application (2) / 创建基于对话框的Win32应用程序(二)Button的应用、新建子窗体 / Win32, VC++, Windows

标签:

原文地址:http://www.cnblogs.com/lantingji/p/5881503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!