C++在VS2022开发Windows窗口程序2:API式的Windows窗口程序设计模式

        函数API式的Windows GUI程序设计模式是一种基于Windows API函数的方式来设计和开发Windows图形用户界面(GUI)应用程序的模式。在这种模式下,开发者通过调用Windows API函数来创建窗口、处理消息、绘制图形等,而不依赖于特定的GUI库或框架。

基本思路就是利用WinMain函数来生成窗口,用WndProc函数来处理窗口收到的消息。

API函数式的Windows程序的开发流程
WinMain,Windows GUI 应用程序的入口点,负责初始化应用程序、创建主窗口、消息循环等
1.设计和注册窗口类
2.创建和显示窗口
3.更新窗口
4.消息循环
5.消息响应
WndProc函数,窗口过程函数,负责处理窗口接收到的消息,会处理窗口消息,比如绘制窗口内容、响应用户。

首先是WinMain函数。

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//设计窗口
	WNDCLASS wc = { 0 };
	wc.lpszClassName = L"MyWindowsClass";//窗口类名
	wc.lpszMenuName = NULL;//窗口类菜单资源名称
	wc.hInstance = hInstance;
	wc.lpfnWndProc = WndProc;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.hIcon = NULL;
	wc.hCursor = LoadCursor(NULL, IDC_APPSTARTING);
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.style = CS_HREDRAW | CS_VREDRAW;
	//注册窗口
	RegisterClass(&wc);
	//创建窗口
	HWND hwnd = CreateWindow(L"MyWindowsClass",L"我的API程序Up设计窗口",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,NULL,hInstance,NULL);
	//显示窗口
	ShowWindow(hwnd, SW_SHOW);
	MoveWindow(hwnd, 600, 200, 500, 500, FALSE);
	//更新窗口
	UpdateWindow(hwnd);
	//消息循环
	MSG msg = { 0 };
	while (msg.message!=WM_QUIT)
	{
		//查看应用程序消息队列,有消息的时候将队列中的消息发送出去
		if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessageW(&msg);
		}
	}
	return 0;
}

WNDCLASS 是一个结构体,用于描述窗口类的特征和行为。在 Windows 编程中,创建窗口前需要先注册一个窗口类,WNDCLASS 结构体就是用来定义和描述这个窗口类的。

定义如下:

typedef struct tagWNDCLASS {
    UINT      style;
    WNDPROC   lpfnWndProc;
    int       cbClsExtra;
    int       cbWndExtra;
    HINSTANCE hInstance;
    HICON     hIcon;
    HCURSOR   hCursor;
    HBRUSH    hbrBackground;
    LPCTSTR   lpszMenuName;
    LPCTSTR   lpszClassName;
} WNDCLASS;

- `style`:窗口类的风格,可以指定一些特定的风格,比如 `CS_HREDRAW` 和 `CS_VREDRAW`,用于确定窗口大小改变时是否需要重绘等。

- `lpfnWndProc`:指向窗口过程函数的指针,用于处理窗口接收到的消息。

- `cbClsExtra`:指定额外的类字节数,通常用于自定义窗口类的扩展信息。

- `cbWndExtra`:指定额外的窗口字节数,通常用于自定义窗口的扩展信息。

- `hInstance`:当前实例的句柄,用于标识窗口类所属的实例。

- `hIcon`:窗口的图标句柄。

- `hCursor`:窗口的光标句柄。

- `hbrBackground`:窗口的背景画刷句柄,用于填充窗口背景。

- `lpszMenuName`:菜单资源的名称。

- `lpszClassName`:窗口类的名称。

然后是WndProc函数,由于我们暂时不需要处理什么特殊的窗口消息,因此WndProc函数里面只有一个窗口关闭消息处理功能,当窗口关闭时,自动结束窗口的程序进程。

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
		//当收到窗口销毁消息时,将窗口程序进程释放掉
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

运行效果如下:

通过函数API式的模式进行WindowsGUI程序编程,可以使得我们的程序模块变得更加的清晰,功能更加的明确。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咩咩大主教

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

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

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

打赏作者

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

抵扣说明:

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

余额充值