无模式对话框和有模式对话框
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消息会在对话框资源模板上的所有子控件(按钮等)创建完成后,再发送给对话框窗口。