5.01 对话框

普通窗口: 自定义函数调用缺省函数(DefWindowProc)

对话框函数: 缺省函数调用自定义函数

对话框原理

● 对话框的分类

  • 模式对话框: 当对话框显示时,会禁止其他窗口和用户交互操作
  • 无模式对话框: 在对话框显示后,其他窗口仍然可以和用户交互操作。

● 对话框基本使用

  1. 对话框窗口处理函数
  2. 注册窗口类 (不使用)
  3. 创建对话框
  4. 对话框的关闭

● 对话框窗口处理函数 (并非真正的对话框窗口处理函数- 真正的是 Windows 系统的)

  1. INT CALLBACK DialogProc(
  2. HWND hwndDlg, //窗口句柄
  3. UINT uMsg//消息ID
  4. WPARAM wParam,//消息参数
  5. LPARAMIParam //消息参数
  6. )
  • 返回 TRUE: 缺省处理函数(Window 系统的)不需要处理
  • 返回 FALSE: 交给缺省处理函数处理

不需要调用缺省对话框窗口处理函数

模式对话框

创建对话框

  1. INT DialogBox(
  2. HINSTANCE hInstance,//应用程序实例句柄
  3. LPCTSTR IpTemplate, //对话框资源ID
  4. HWND hWndParent, //对话框父窗口
  5. DLGPROC IpDialogFunc //自定义函数
  6. )

DialogBox 是一个阻塞函数,只有当对话框关闭后,才会返回,继续执行后续代码

返回值是通过 EndDialoq 设置

● 对话框的关闭

  1. BOOL EndDialog(
  2. HWND hDlg, //关闭的对话框窗口句柄
  3. INT_PTR nResult //关闭的返回值
  4. )

关闭模式对话框,只能使用 EndDialog,不能使用 DestroyWindow(只能销毁 不能关闭阻塞)等函数.

nResult,是 DialogBoxi 函数退出时的返回值.

● 对话框的消息

WM_INITDIALOG: 对话框创建之后显示之前,通知对话框窗口处理函数,可以完成自己的初始化相关的操作.

WM_CREATE: 对话框没有这个消息

无模式对话框

● 创建对话框

  1. HWND CreateDialog(
  2. HINSTANCE hInstance, //应用程序实例句柄
  3. LPCTSTR IpTemplate, //模板资源ID
  4. HWND hWndParent, //父窗口
  5. DLGPROC IpDialogFunc //自定义函数
  6. )

非阻塞函数,创建成功返回窗口句柄,需要使用 ShowWindow 函数显示对话框.

● 对话框的关闭

关闭时使用 DestroyWindow 销毁窗口,不能使用 EndDialog 关闭对话框.

对话框总结