前言
- 各位师傅大家好,我是qmx_07,今天给大家讲解对话框的相关知识点,就此SDK学习告一段落,之后会更新相关项目内容
创建对话框
- 项目->添加 ->资源->Dialog->修改对话框ID->拖拉尺寸设置对话框大小
通过菜单绑定 模态对话框
- 通过点击菜单栏,呼唤 对话框窗口
INT_PTR CALLBACK Dialog1WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
return (INT_PTR)TRUE;
}
case WM_CLOSE:
{
EndDialog(hWnd, 0);
break;
}
default:
break;
}
return 0;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
//模态对话框
case ID_DLG1:
{
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_ONE),hWnd, Dialog1WndProc);
}
- DiaglogBox创建模态对话框,并绑定对话框过程函数
- Diaglog和EndDiaglog配套使用
- 对话框也属于一个窗口,有自己的过程处理函数,函数作用:处理对话框产生的消息,处理返回TRUE,不处理返回FALSE由系统进行内定处理
画面演示:
- 模态对话框会阻塞父窗口的原因:
- 模态对话框内部自建消息循环
- 对话框初始化的时候,显示对话框之前发送【WM_INITDIALOG】进行初始化,调用了EnableWindows 禁用了父窗口你的鼠标和键盘输入
- 对话框创建完成后不能如CreateWindow创建的那般缩放 窗口大小
相关API讲解
- DialogBox:函数用于创建一个基于模板资源的模态(模式)对话框
- 需要调用 EndDialog 函数终止模态对话框
int DialogBox(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
- DialogWndProc:用于处理模态对话框 或者 非模态对话框的消息处理
BOOL CALLBACK DialogWndProc(
HWND hwndDlg, //指向该对话框的句柄
UINT uMsg, //消息ID
WPARAM wParam, //其他消息
LPARAM lParam //其他消息
);
- GetModuleHandle:获取模块句柄,模块必须为DLL文件,如果参数为NULL GetModuleHandle返回对用于创建调用进程的文件的句柄(exe文件)
HMODULE GetModuleHandle( LPCTSTR lpModuleName);
通过菜单绑定非模态对话框
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
//非模态对话框
case ID_DLG2:
{
HWND hDlg2 = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_TWO), hWnd, Dialog2WndProc);
ShowWindow(hDlg2, SW_SHOW);
}
}
INT_PTR CALLBACK Dialog2WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
return (INT_PTR)TRUE;
}
case WM_CLOSE:
{
EndDialog(hWnd, 0);
break;
}
default:
break;
}
return 0;
}
- CreateDialog创建对话框,并绑定对话框过程函数,返回值为指向该非模态对话框的窗口句柄。
搭配EndDialog来关闭非模态窗口 - 非模态对话框需要调用showWindow来显示窗口
- 非模态对话框 可以操作父窗口
画面演示:
相关API讲解
CreateDidlog:从对话框模板资源创建一个非模态对话框,需要通过showWindow来显示窗口
HWND CreateDialog(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
总结
- 介绍了SDK 模态对话框 和 非模态对话框的区别,相关API讲解,及画面演示