Ⅰ.使用對話框資源建立主窗口
一、概述
在Charles Petzold的書中,介紹了一種直接利用對話框資源建立主窗口的方法。
使用這種方法,可以方便的在主窗口中安排子控件,而代碼的其他部分跟用普通窗口時一樣。
我們知道,對話框是系統預先定義的“窗口類”,它有自己的窗口處理函數,我們自己寫的對話框消息處理函數並不是真正的窗口消息處理函數。
但我們可以在對話框模板腳本中,指定這個對話框使用我們自己定義的窗口類,而不是系統的對話框類,這樣,就將對話框的消息處理函數“嫁接”成我們自己定義的消息處理函數了。
二、書寫一個“真正的”窗口消息處理函數
按照普通窗口的方式書寫好消息處理函數。
(不要漏掉了DefWindowProc)
三、注冊窗口類
用書寫的消息處理函數注冊一個窗口類。
四、建立對話框資源,指定窗口類為自定的窗口類。
手工書寫一個對話框資源,存為單獨文件,然後包含到資源文件中去。
(使用菜單View->Resource Includes彈出對話框,將文件名填入到Compile-time derective一欄,這將在rc文件中添加一行:"#include ""Some.dlg"" ")
例:
建立文件Some.dlg
書寫:
HexCalc DIALOG -1, -1, 102, 122
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "HexCalc" //填寫上自己注冊的類名稱
CAPTION "Hex Calculator"
{
PUSHBUTTON "D", 68, 8, 24, 14, 14
PUSHBUTTON "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。