对话框
获取dialog中的元素句柄
/*
hDlg 文件句柄
IDC_BT_GO 表示 绘制dialog时指定的id
*/
HWND BT_GO = GetDlgItem(hDlg, IDC_BT_GO);
对话框的类型
非模式对话框
- 非模式对话框是作为一个独立窗口打开的,不会影响父窗口的状态
- 非模式对话框在不关闭的情况下也能返回下一句程序位置
hwndResultDlg = CreateDialog (hInst, TEXT ("RESULT"), hwnd, ResultDlg) ;
模式对话框
- 模式对话框打开后,关闭前父窗口是不能使用的
- 必须要对话框关闭以后,函数才会返回调用生成对话框语句的下一句
DialogBoxParam()
与DialogBox()
的区别是,前者最后多一个参数,可以传递给Iparam
参数
DialogBoxParam (hInst, TEXT ("SEND"), hwnd, SendDlg,0);
DialogBox (hInst, TEXT ("SEND"), hwnd, SendDlg);
销毁
EndDialog();
消息处理机制
- “非模式对话框”与“模式对话框”不同,模式对话框工作的时候,有其内部的消息泵机制。
- 非模式对话框则象普通窗口一样,由
WinMain
中书写的消息循环驱动。 - 在消息循环中,需要先给对话框提供截获消息的机会。
实例 非模式对话框
hDlgModeless = CreateDialog (
hInstance,
TEXT ("ColorScrDlg"), //对话框模板
hwnd,
ColorScrDlg //对话框消息处理函数
);
//消息循环
while (GetMessage (&msg, NULL, 0, 0))
{
/*
IsDialogMessage :
1. 判断消息是不是 hDlgModeless 的消息
2. 返回鉴别结果
3. 如果是 hDlgModeless的消息那么就直接分发掉
*/
if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}