【免杀前置课——Windows编程】八、控件的使用(控件的创建方式、操作控件的相关函数、控件的使用场景、控件分类、标准控件、实现选中选项后弹出已选选项)(附代码)

控件的使用

控件的创建方式:

通常创建一个控件有两种方式:
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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webfker from 0 to 1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值