控件的使用
控件的创建方式:
通常创建一个控件有两种方式:
1、CreateWindow.创建,使用内置类名。
2、通过对话框资源拖拉拽的方式。这种最简单。
注意
:控件的创建方式虽然不同,但是使用的时候完全一致。
操作控件的相关函数:
- GetDlgItem 获取窗口句柄
- SendMessage 发送消息
- MoveWindow 移动窗口
- GetWindowText 获取内容
- GetParent 获取父窗口句柄
- ShowWindow 显示隐藏窗口
控件的使用场景:
1、控件被用户操作的时候,会给父窗口发送消息,我们根据用户的动作去实现一些功能。
2、我们需要使用代码控制控件去干一些事情,一般情况都用GetDlgItem函数获取窗口句柄
,根据子控件ID获取到子控件,再通过SendMessage.发送消息控制控件的行为。
控件分类:
控件都是windows自己实现好的窗口样式。分两大类:
1、标准控件,可以直接使用控件数量少,功能简单
2、通用控件,需要做一些初始化操作,控件数量多,功能强大。
标准控件:
按钮,复选框,单选框,静态文本框,图片,复合框,编辑框。
调试对话框
CTRL+D标上序号,在按钮上选择属性,看到杂项中组,设置为TRUE,按序号顺序下去知道下一个TRUE之前都为一个组。即6为TRUE,78都为FALSE,即678为一组。
实现以下两行代码后,将第一个选项默认选中。
实现选中选项后弹出已选选项
分别给按钮12选择空间,如果选中了左边按钮点按钮1,即可出现左边选中的选项,如果选中了右边按钮点按钮2,即可出现右边选中的选项。
#include<Windows.h>
#include<CommCtrl.h>
#include"resource.h"
void print(LPCWSTR format, ...)
{
WCHAR wchar_buff[100]{ 0 };
va_list arglist;
va_start(arglist, format);//指针指向指向format的下一个参数
wvsprintfW(wchar_buff, format, arglist);
va_end(arglist);
OutputDebugStringW(wchar_buff);
}
INT_PTR CALLBACK Dlgproc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
//HWND hcheck1 = GetDlgItem(hwnd, IDC_CHECK1);//获取IDC_CHECK1的句柄
//SendMessageW(hcheck1, BM_SETCHECK, BST_CHECKED, 0);//选中第一个选项
SendDlgItemMessageW(hwnd, IDC_CHECK1, BM_SETCHECK, BST_CHECKED, 0);//前两句功能二合一
//Button_SetCheck();
break;
}
case WM_COMMAND:
{
WORD ControlId = LOWORD(wParam);
switch (ControlId)
{
case IDC_BUTTON1:
{
WCHAR buff[20]{ 0 };
for (UINT BTNID = IDC_CHECK1; BTNID <= IDC_CHECK3; BTNID++)
{
UINT Checked = SendDlgItemMessageW(hwnd, BTNID, BM_GETCHECK, 0, 0);
if (Checked == BST_CHECKED)
{
GetDlgItemTextW(hwnd, BTNID, buff, 20);//获取当前ID句柄
MessageBoxW(hwnd, buff, L"提示", MB_OK);
}
}
break;
}
case IDC_BUTTON2:
{
WCHAR buff[20]{ 0 };
for (UINT BTNID = IDC_RADIO1; BTNID <= IDC_RADIO3; BTNID++)
{
UINT Checked = SendDlgItemMessageW(hwnd, BTNID, BM_GETCHECK, 0, 0);
if (Checked == BST_CHECKED)
{
GetDlgItemTextW(hwnd, BTNID, buff, 20);//获取当前ID句柄
MessageBoxW(hwnd, buff, L"提示", MB_OK);
}
}
break;
}
default:
break;
}
break;
}
case WM_CLOSE:
{
EndDialog(hwnd, 0);
break;
}
default:
return FALSE;
}
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
DialogBoxW(hInstance, MAKEINTRESOURCEW(IDD_DIALOG1), NULL, Dlgproc);
return 0;
}
按钮1
按钮2