標籤:
建立基於對話方塊的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