对话框

获取dialog中的元素句柄

/*
hDlg 文件句柄
IDC_BT_GO 表示 绘制dialog时指定的id
*/
HWND BT_GO = GetDlgItem(hDlg, IDC_BT_GO);

对话框的类型

非模式对话框

  1. 非模式对话框是作为一个独立窗口打开的,不会影响父窗口的状态
  2. 非模式对话框在不关闭的情况下也能返回下一句程序位置
hwndResultDlg = CreateDialog (hInst, TEXT ("RESULT"), hwnd, ResultDlg) ;

模式对话框

  1. 模式对话框打开后,关闭前父窗口是不能使用的
  2. 必须要对话框关闭以后,函数才会返回调用生成对话框语句的下一句
  3. DialogBoxParam()DialogBox()的区别是,前者最后多一个参数,可以传递给Iparam参数
DialogBoxParam (hInst, TEXT ("SEND"), hwnd, SendDlg,0);
DialogBox (hInst, TEXT ("SEND"), hwnd, SendDlg);

销毁

EndDialog();

消息处理机制

  1. “非模式对话框”与“模式对话框”不同,模式对话框工作的时候,有其内部的消息泵机制。
  2. 非模式对话框则象普通窗口一样,由WinMain中书写的消息循环驱动。
  3. 在消息循环中,需要先给对话框提供截获消息的机会。

实例 非模式对话框

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) ;
   }

}
Last modification:October 26, 2018
如果觉得我的文章对你有用,请随意赞赏