一、概述
在Charles Petzold的書中,介紹了一種直接利用對話方塊資源建立主視窗的方法。
使用這種方法,可以方便的在主視窗中安排子控制項,而代碼的其他部分跟用普通視窗時一樣。
我們知道,對話方塊是系統預先定義的“視窗類別”,它有自己的視窗處理函數,我們自己寫的對話方塊訊息處理函數並不是真正的視窗訊息處理函數。
但我們可以在對話方塊模板指令碼中,指定這個對話方塊使用我們自己定義的視窗類別,而不是系統的對話方塊類,這樣,就將對話方塊的訊息處理函數“嫁接”成我們自己定義的訊息處理函數了。
二、書寫一個“真正的”視窗訊息處理函數
按照普通視窗的方式書寫好訊息處理函數。
(不要漏掉了DefWindowProc)
三、註冊視窗類別
用書寫的訊息處理函數註冊一個視窗類別。
四、建立對話方塊資源,指定視窗類別為自定的視窗類別。
手工書寫一個對話方塊資源,存為單獨檔案,然後包含到資源檔中去。
(使用菜單View->Resource Includes彈出對話方塊,將檔案名稱填入到Compile-time derective一欄,這將在rc檔案中添加一行:"#include ""Some.dlg"" ")
例:
建立檔案Some.dlg
書寫:
HexCalc DIALOG -1, -1, 102, 122STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOXCLASS "HexCalc" //填寫上自己註冊的類名稱CAPTION "Hex Calculator"{PUSHBUTTON "D", 68, 8, 24, 14, 14PUSHBUTTON "A", 65, 8, 40, 14, 14//各種控制項}
五、使用非強制回應對話方塊方式建立主視窗
建立主視窗的時候,使用CreateDialog。
hwnd = CreateDialog (hInstance,szAppName,//對話方塊模板0,NULL) ;ShowWindow (hwnd, iCmdShow) ;
其他各部分,都與普通視窗時相同(註冊視窗類別、訊息迴圈等)。
Ⅱ.在對話方塊中建立自訂子視窗
可以自己定義控制項,然後在對話方塊模板中使用
一、定義"視窗類別"與訊息處理函數
在WinMain中
除了註冊主視窗類外,
另外註冊用於對話方塊的類,指明類對應的訊息處理函數
wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = SomeWndProc ; //對應的訊息處理函數wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = NULL ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = TEXT ("SomeControl") ;ReGISterClass (&wndclass) ;
同時,還要書寫好訊息處理函數SomeWndProc。
二、在對話方塊模板中添加自訂控制項視窗
在對話方塊模板上放上"Custom Control",然後設定屬性,並填寫自己定義的類名稱SomeControl。