C++绘制程序窗口

本文介绍了如何从头开始设计和实现一个简单的Windows窗口程序,特别是针对俄罗斯方块游戏。首先,定义窗口类,设置背景、鼠标光标、图标等属性。接着,注册窗口类,然后创建并显示窗口。更新和消息循环确保窗口的正常运行。在窗口处理函数中处理绘画、关闭和销毁等消息。最后,文章提供了完整的C++代码示例,展示了如何绘制方块并生成随机方块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

绘制窗口的步骤可以大致分为,设计窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,消息循环。


一、设计窗口类

这里要用到WNDCLASS窗口类,先定义一个WNDCLASS类的变量。通过对于这个变量的初始化,我们可以设置窗口的背景颜色,鼠标光标类型,图标,应用程序实例句柄,窗口处理函数等等。

TCHAR szAppClassName[] = TEXT("ZWX");
WNDCLASS wc = {
   
    0 };
wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 0));					//背景颜色画刷
wc.hCursor = LoadCursor(NULL, IDC_HAND);								//鼠标光标类型,手:DC_HAND
wc.hIcon = LoadIcon(NULL, IDI_ERROR);									//图标
wc.hInstance = hInstance;												//应用程序实例句柄,表示exe
wc.lpfnWndProc = WindowProc;											//窗口处理函数
wc.lpszClassName = szAppClassName;										//窗口类型名
wc.style = CS_HREDRAW | CS_VREDRAW;										//窗口类的风格

二、注册窗口类

使用RegisterClass(&wc)注册窗口

RegisterClass(&wc);

三、创建窗口

使用CreateWindow函数创建窗口,通过函数参数可以设置窗口类型名,窗口标题,窗口的风格,窗口左上角的坐标,窗口的宽和高等等。

HWND hWnd=CreateWindow(
	szAppClassName,														    //窗口类型名
	TEXT("方块"),					                                    //窗口标题
	WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,                   //窗口的风格
	200, 100,                                                               //窗口左上角坐标(像素)
	492, 634,                                                               //窗口的宽和高
	NULL,                                                                   //父窗口句柄
	NULL,                                                                   //菜单句柄
	hInstance,						                                        //应用程序实例句柄
	NULL                                                                    //附加参数
);

四、显示窗口

使用ShowWindow(hWnd, SW_SHOW)显示窗口,hWnd是创建窗口时HWND类型的变量。

ShowWindow(hWnd, SW_SHOW);

五、更新窗口

使用UpdateWindow(hWnd)函数更新窗口。

UpdateWindow(hWnd);

六、消息循环

通过GetMessage函数从消息队列中取得消息。将接收到的消息用TranslateMessage函数将虚拟键消息转换为字符消息,然后用DispatchMessage将消息分发给窗口处理函数。

MSG msg;
while (GetMessage(&msg, NULL, 0, 0))//GetMessage从调用线程的消息队列中取得一个消息并放于msg
{
   
   
	//将虚拟键消息转换为字符消息
	TranslateMessage(&msg);
	//将消息分发给窗口处理函数
	DispatchMessage(&msg);
}

七、完整代码

#include<windows.h>
#include<time.h>
#include<iostream>
using namespace std;

int g_arrTetrics[2][4] = {
   
    0 };

//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg,WPARAM wParam,LPARAM lParam);
//绘图
void OnPaint(HDC hDC);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莫璃Moly

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

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

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

打赏作者

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

抵扣说明:

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

余额充值