无模式对话框和有模式对话框

1、两者区别

  无模式对话框 - 对话框显示后,不影响其它窗口的使用
      有模式对话框 - 对话框显示后,会将其它窗口禁止输入操作.

2、两者的创建差异

  无模式对话框 -使用CreateDialog函数

  有模式对话框 -使用DialogBox函数

3、创建过程

  无模式对话框:HWND CreateDialog(HINSTANCE hInstance,//应用程序实例句柄
                      LPCTSTR lpTemplate,//对话框的资源ID
                      HWND hWndParent,//父窗口
                      DLGPROC lpDialogFunc //对话框的窗口处理函数

                    );     返回值是创建好的对话框的窗口句柄。

  有模式对话框:int DialogBox(HINSTANCE hInstance, //应用程序句柄
                  LPCTSTR lpTemplate,//对话框资源ID字符串
                  HWND hWndParent,//父窗口句柄
                  DLGPROC lpDialogFunc //对话框窗口处理函数

                );

4、定义对话框窗口处理函数

  两种对话框都需要定义对话框处理函数:BOOL CALLBACK DialogProc(HWND hwndDlg,  // 对话框句柄
                                     UINT uMsg,     // 消息
                                     WPARAM wParam, // 当前接受输入焦点子控件窗口句柄
                                     LPARAM lParam  // 创建时附带的参数

                                   );

5、关闭对话框

  由于有模式对话框DialogBox是阻塞函数,执行后会等候返回,只有在EndDialog结束对话框,DialogBox才会返回。

  无模式对话框和有模式对话框都是使用EndDialog来关闭对话框。

  BOOL EndDialog( HWND hDlg, //关闭对话框的窗口句柄
                        int nResult //DialogBox函数的返回值

           );      

  

6、对话框中的消息

  使用WM_INITDIALOG消息,可以在对话框创建完成后,进行数据初始化。

  它与WM_CREATE不同之处是,WM_INITDIALOG消息会在对话框资源模板上的所有子控件(按钮等)创建完成后,再发送给对话框窗口。

原文地址:https://www.cnblogs.com/zjzsky/p/3472844.html