创建基于对话框的Windows应用程序(二) —— Button的应用、新建子窗体
可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的。现在我们来为他们添加退出对话框的功能。
6、首先定义命令消息响应函数(Dlg_OnCommand)如下:
其中IDOK和IDCANCEL分别是按钮OK和Cancel对应的标识符。
7、接下来定义宏替换如下:
8、再在回调函数(Dlg_Proc)中利用宏替换调用命令消息响应函数(Dlg_OnCommand)如下:
9、由于HANDLE_WM_COMMAND是在windowsx.h头文件中定义的,故添加其引用。
10、此时按下F5 Start Debugging,再点击OK或Cancel按钮可以看到新建的对话框将会关闭。
下面我们演示如何新建子窗体。
11、首先在Solution Explorer或 Resources View 中右键Add Resource,选择Dialog。并在Resources View 中找到新建Dialog,右键Propertise修改相关内容。
12、点选并按下Delete键删掉新建子对话框中无用的OK和Cancel按钮。当 .h/.rc/.cpp文件中存在所删除控件的相关代码时记得一并删除或注释掉。
13、在View中打开Toolbox(Ctrl+Alt+X),添加Static Text控件到新建子窗体中,修改控件内容并调整二者至合适大小。
14、找到之前Dialog中的Button按钮,修改其Propertise。
15、切换到 .cpp文件中,修改被调用的命令消息响应函数(Dlg_OnCommand),在IDNEW的case中调用DialogBoxParam,并编写子对话框的回调函数(NewDlg_Proc)。
#include <Windows.h>
#include <windowsx.h>
#include <tchar.h>
#include "Resource.h" // The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
// boxes because DlgProc returns a BOOL instead of an LRESULT (like
// WndProcs). This chHANDLE_DLGMSG macro corrects the problem:
#define chHANDLE_DLGMSG(hWnd, message, fn) \
case (message): return (SetDlgMsgResult(hWnd, uMsg, \
HANDLE_##message((hWnd), (wParam), (lParam), (fn)))) INT_PTR WINAPI NewDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg)
{
case WM_CLOSE:
EndDialog(hWnd, );
break;
} return(FALSE);
} void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) { switch (id) {
case IDNEW:
DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_NEWDIALOG),
hWnd, NewDlg_Proc, NULL);
break;
case IDCANCEL:
SendMessage(hWnd, WM_CLOSE, , );
break; }
} INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg)
{
chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
case WM_CLOSE:
EndDialog(hWnd, );
break;
} return(FALSE);
} int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_DIALOG),
NULL, Dlg_Proc, _ttoi(pszCmdLine));
return();
}
Win32WindowsApplication.cpp
16、此时按下F5 Start Debugging,再点击New按钮,可以看到刚才新建的子对话框。
————————————————
本文为本人原创,转载请注明出处。