Windows学习笔记-08(关于如何使用Dialog资源的简单说明)
1、添加Dialog资源
资源文件->添加->资源->Dialog:

可右键该Dialog->属性,从而对其进行更改、查看其ID:

2、编写基础的主函数和Dialog的过程函数
#include
#include
#include "resource.h"
INT_PTR CALLBACK Digproc(HWND hwnd,UINT uMsg,WPARAM wparam,LPARAM lparam)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
// 对话框初始化
// 当前代码为空,实际应用中可能包含以下操作:
// 1. 设置对话框图标
// 2. 初始化对话框中的控件(如设置编辑框默认文本)
// 3. 加载配置信息到控件
// 4. 设置焦点到某个控件(返回TRUE表示系统设置焦点,FALSE表示手动设置)
break;
}
case WM_CLOSE:
{
// 注意:对于模态对话框,使用EndDialog;对于非模态对话框,使用DestroyWindow
EndDialog(hwnd,0);
break;
}
default:
return FALSE;
break;
}
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nShowCmd)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, Digproc);
return 0;
}
对话框类型说明:
-
模态对话框:阻塞父窗口,用户必须处理完当前对话框才能操作其他窗口
-
非模态对话框:不阻塞父窗口,用户可以同时操作多个窗口
本代码创建的是模态对话框,使用DialogBox函数。如果创建非模态对话框,需要使用:
CreateDialog(hinstance, MAKEINTRESOURCE(IDD_DIALOG1), hwndParent, Digproc);
ShowWindow(hDlg, SW_SHOW);
3、在Dialog上添加控件
视图->工具箱:


可将工具箱内的控件拖拽至Dialog中,并可在右上角的工具栏处设置控件的对齐方式:

4、控件的使用
- 控件被用户操作的时候,会给父窗口发送消息,需要我们根据用户的动作去实现一些功能。
- 需要使用代码控制控件去千一些事情,一般情况都用GetDlgItem函数获取窗口句柄,根据子 控件ID获取到子控件,再通过SendMessage发送消息控制控件的行为。
HWND GetDlgItem(
HWND hDlg, // 对话框或窗口句柄
int nIDDlgItem // 控件ID
);
注意:不知道如何使用的函数和消息参数,可以选中后按F1进行查看。
5、简单的示例

#include
#include
#include "resource1.h"
INT_PTR CALLBACK Digproc(HWND hwnd,UINT uMsg,WPARAM wparam,LPARAM lparam)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
// 对话框初始化
//第一种:
//HWND check1 = GetDlgItem(hwnd, IDC_CHECK1);
//SendMessageW(check1,BM_SETCHECK, BST_CHECKED,0);
//第二种:
SendDlgItemMessage(hwnd, IDC_CHECK1, BM_SETCHECK, BST_CHECKED, 0);
break;
}
case WM_COMMAND:
{
WCHAR ContrID = LOWORD(wparam);//控制标识符
WCHAR MessCode = HIWORD(wparam);//控件定义的通知代码
WCHAR buff[20] = { 0 };
switch (ContrID)
{
case IDOK:
{
for (UINT CID = IDC_CHECK1; CID <= IDC_CHECK3; ++CID)//通过遍历来获取
{
UINT Checked = SendDlgItemMessageW(hwnd, CID, BM_GETCHECK, 0, 0);
if (Checked == BST_CHECKED)
{
GetDlgItemTextW(hwnd, CID, buff, 20);
MessageBox(hwnd, buff, L"提示", MB_OK);
}
}
}
}
break;
}
case WM_CLOSE:
{
EndDialog(hwnd,0);
break;
}
default:
return FALSE;
break;
}
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nShowCmd)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, Digproc);
return 0;
}











