5.01 对话框
普通窗口: 自定义函数调用缺省函数(DefWindowProc)
对话框函数: 缺省函数调用自定义函数
对话框原理
● 对话框的分类
- 模式对话框: 当对话框显示时,会禁止其他窗口和用户交互操作
- 无模式对话框: 在对话框显示后,其他窗口仍然可以和用户交互操作。
● 对话框基本使用
- 对话框窗口处理函数
- 注册窗口类 (不使用)
- 创建对话框
- 对话框的关闭
● 对话框窗口处理函数 (并非真正的对话框窗口处理函数- 真正的是 Windows 系统的)
INT CALLBACK DialogProc(
HWND hwndDlg, //窗口句柄
UINT uMsg,//消息ID
WPARAM wParam,//消息参数
LPARAMIParam //消息参数
)
- 返回 TRUE: 缺省处理函数(Window 系统的)不需要处理
- 返回 FALSE: 交给缺省处理函数处理
不需要调用缺省对话框窗口处理函数
模式对话框
创建对话框
INT DialogBox(
HINSTANCE hInstance,//应用程序实例句柄
LPCTSTR IpTemplate, //对话框资源ID
HWND hWndParent, //对话框父窗口
DLGPROC IpDialogFunc //自定义函数
)
DialogBox 是一个阻塞函数,只有当对话框关闭后,才会返回,继续执行后续代码
返回值是通过 EndDialoq 设置
● 对话框的关闭
BOOL EndDialog(
HWND hDlg, //关闭的对话框窗口句柄
INT_PTR nResult //关闭的返回值
)
关闭模式对话框,只能使用 EndDialog,不能使用 DestroyWindow(只能销毁 不能关闭阻塞)等函数.
nResult,是 DialogBoxi 函数退出时的返回值.
● 对话框的消息
WM_INITDIALOG: 对话框创建之后显示之前,通知对话框窗口处理函数,可以完成自己的初始化相关的操作.
WM_CREATE: 对话框没有这个消息
无模式对话框
● 创建对话框
HWND CreateDialog(
HINSTANCE hInstance, //应用程序实例句柄
LPCTSTR IpTemplate, //模板资源ID
HWND hWndParent, //父窗口
DLGPROC IpDialogFunc //自定义函数
)
非阻塞函数,创建成功返回窗口句柄,需要使用 ShowWindow 函数显示对话框.
● 对话框的关闭
关闭时使用 DestroyWindow 销毁窗口,不能使用 EndDialog 关闭对话框.