【免杀前置课——Windows编程】五、窗口控件——什么是控件、Windolws 窗口两大类、Windows标准控件/通用控件、控件响应的接收、创建窗口制作不同控件

窗口控件

WINDOW控件

什么是控件?

控件是常见的窗口上的交互元素.例如:一个按钮,一个复选框,一个列表框等。当控件的特定功能被触发后,会主动发送消息通知父窗口,父窗口可以通过发送消息给控件控制控件的行为。
***控件的本质也是一个窗口。***也可以说在Windows中万物皆窗口
Windows窗口风格

Windolws 窗口从其特点是主要分为两大类

1、一类是表明窗口和其他窗口关系的包括:
WS_OVERLAPED(重叠窗口样式)
  一个重叠窗口是顶层窗口有一个标题栏,边框和客户区,它的目的是作为一个应用程序的主窗口。 它也可以有一个窗口菜单,最小化和最大化按钮和滚动条。 重叠的窗口作为主窗口使用通常包括所有这些组件。
WS_POPPUP(弹出窗口)
 弹出窗口是顶级窗口,并连接到桌面窗口的子窗口的列表。 应用程序通常使用对话框弹出窗口。 主要的区别弹出和重叠的窗口是弹出式窗口不需要有标题和重叠的窗口必须有标题。
WS_CHILD(子窗口)
  子窗口必须有一个父窗口,并只限于其父窗口内。 这是在子窗口和重叠和弹出窗口的主要区别。

2、一类是表明窗口自身外观特征的 WS_BORDER(边框) WS_CAPITON(标题栏)

Windows标准控件

在这里插入图片描述

Windows通用控件

  • wC_LISTVIEW列表框控件
  • wC_TREEVIEW 树控件
  • wC_TABCONTROL Tab控件

控件的响应

子控件通知父窗口一些事件,例如子控件被点击,需要通过以下两类消息。
标准控件的消息:WM_COMMAND
通用控件的消息:WM_NOTIFY

创建窗口实现按钮及文本控件

#include<Windows.h>
#include<CommCtrl.h>


LRESULT CALLBACK WindowProc(
	_In_ HWND hwnd,
	_In_ UINT uMsg,
	_In_ WPARAM wParam,
	_In_ LPARAM lParam
)
{
	static HINSTANCE hInstance = GetModuleHandle(NULL);//获取当前程序的实例句柄
	switch (uMsg) 
	{
	case WM_CREATE:
		//添加控件
		CreateWindowW(WC_BUTTON,//窗口类名,标准控件点击后触发32行代码
			L"按钮1",//窗口名
			WS_CHILD | WS_VISIBLE,//窗口在父窗口的关系名|自身外观特征名
			10, 10, 120, 40,//xy坐标及宽高
			hwnd,//父窗口句柄
			(HMENU)0x100,//控件的ID,控件之间的ID不要重复
			hInstance,//获取的实例句柄
			0
		);
		CreateWindowW(WC_BUTTON, L"按钮2", WS_CHILD | WS_VISIBLE, 10, 80, 120, 40, hwnd, (HMENU)0x101, hInstance, 0);
		CreateWindowW(WC_EDIT, L"文本框内容", WS_CHILD | WS_BORDER | WS_VISIBLE, 10, 150, 120, 40, hwnd, (HMENU)0x102, hInstance, 0);
		break;
	case WM_CLOSE:
		MessageBoxW(hwnd, L"窗口关闭了", L"提示", MB_OK);
		DestroyWindow(hwnd);
		PostQuitMessage(0);
		break;
	case WM_COMMAND://标准控件的消息
	{
		WORD ControlId = LOWORD(wParam);
		if (ControlId == 0x100)
		{
			MessageBoxW(hwnd, L"按钮1被点击了", L"提示", MB_OK);
		}
		else if(ControlId == 0x101)
		{
			MessageBoxW(hwnd, L"按钮2被点击了", L"提示", MB_OK);
		}	
		break;
	}	
	}
	return DefWindowProcW(hwnd, uMsg,wParam,lParam);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//1、创建窗口类
	WNDCLASSW myWndClass{ 0 };
	myWndClass.lpfnWndProc = WindowProc;
	myWndClass.lpszClassName = L"dsdWindows";
	//2、注册窗口类
	RegisterClassW(&myWndClass);
	//3、创建窗口
	HWND hwnd = CreateWindowW(
		myWndClass.lpszClassName,
		L"dsdWindows",
		WS_OVERLAPPEDWINDOW,//重叠窗口样式,其他窗口写在该窗口上方即16行代码
		CW_USEDEFAULT,
		0,
		CW_USEDEFAULT,
		0,
		NULL,
		NULL,
		hInstance,
		0
	);
	//4、显示窗口
	ShowWindow(hwnd, SW_SHOWNORMAL);//SHOWWINDOWS展示样式
	MSG msg{ 0 };
	while (GetMessageW(&msg,0,0,0)) {
		DispatchMessageW(&msg);
	}
	return 0;
}

对不同控件进行实现
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为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、付费专栏及课程。

余额充值