在Windows编程中,FillRect()函数是一种常用的绘制矩形的方法。FillRect()函数用于填充一个矩形区域,可以使用不同的颜色填充。
本文将介绍如何使用FillRect()函数绘制矩形。
FillRect()函数的语法如下:
BOOL FillRect(
HDC hDC,
const RECT *lprc,
HBRUSH hbr
);
其中,hDC是设备上下文句柄,lprc是矩形区域的指针,hbr是画刷句柄。该函数返回一个布尔值,表示函数是否执行成功。
FillRect()函数非常容易使用,下面将介绍如何使用它来绘制矩形。
步骤1:创建窗口
首先,我们需要创建一个窗口。以下是一个简单的创建窗口的代码:
#include
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "FillRectDemo";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
HWND hwnd = CreateWindowEx(0, "FillRectDemo", "FillRect Demo", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
在这个示例中,我们定义了一个名为“FillRectDemo”的窗口类,并创建了一个名为“FillRect Demo”的窗口。
步骤2:添加矩形
接下来,我们将在窗口上添加一个矩形。
为了添加一个矩形,我们需要在窗口的WM_PAINT消息处理程序中添加以下代码:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect = { 100, 100, 200, 200 };
HBRUSH hBrush = CreateSolidBrush(RGB(0, 255, 0)); //使用绿色填充矩形
FillRect(hdc, &rect, hBrush);
DeleteObject(hBrush);
EndPaint(hwnd, &ps);
break;
}
在这个程序中,我们使用CreateSolidBrush()函数创建一个画刷,使用RGB()函数设置绿色。接下来,我们定义一个名为“rect”的RECT结构体,它代表一个矩形,它的左上角坐标是(100, 100),右下角坐标是(200, 200)。
接下来,我们使用FillRect()函数填充矩形。我们传递hdc作为设备上下文句柄,&rect作为矩形区域指针,hBrush作为画刷句柄。
最后,我们删除画刷并调用EndPaint()函数。
代码执行后,你将看到如下的绿色矩形:
![fillrect_demo1.png](https://cdn.jsdelivr.net/gh/YellowTulipShow/CDN/images/fillrect_demo1.png)
步骤3:绘制多个矩形
使用FillRect()函数,我们可以轻松地绘制多个矩形。以下是一个简单的示例代码:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect1 = { 100, 100, 200, 200 };
RECT rect2 = { 250, 100, 350, 200 };
HBRUSH hBrush1 = CreateSolidBrush(RGB(0, 255, 0));
HBRUSH hBrush2 = CreateSolidBrush(RGB(255, 0, 0)); //红色矩形
FillRect(hdc, &rect1, hBrush1);
FillRect(hdc, &rect2, hBrush2);
DeleteObject(hBrush1);
DeleteObject(hBrush2);
EndPaint(hwnd, &ps);
break;
}
在这个程序中,我们声明了两个矩形:rect1和rect2。我们创建了两个画刷:hBrush1和hBrush2,分别用于绿色和红色矩形。
我们使用FillRect()函数绘制两个矩形,并在最后删除了画刷。
代码执行后,你将看到如下两个矩形:
![fillrect_demo2.png](https://cdn.jsdelivr.net/gh/YellowTulipShow/CDN/images/fillrect_demo2.png)
步骤4:使用不同的画刷
FillRect()函数允许我们使用不同的画刷,以创建具有不同颜色或图案的矩形。下面是一个使用不同画刷的简单示例:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect1 = { 100, 100, 200, 200 };
RECT rect2 = { 250, 100, 350, 200 };
HBRUSH hBrush1 = CreateSolidBrush(RGB(0, 255, 0)); //纯绿色
HBRUSH hBrush2 = CreateHatchBrush(HS_DIAGCROSS, RGB(255, 0, 0)); //红色对角线图案
FillRect(hdc, &rect1, hBrush1);
FillRect(hdc, &rect2, hBrush2);
DeleteObject(hBrush1);
DeleteObject(hBrush2);
EndPaint(hwnd, &ps);
break;
}
在这个示例中,我们使用CreateSolidBrush()函数创建了一个纯绿色画刷。我们还使用CreateHatchBrush()函数创建了一个带有对角线图案的红色画刷。
我们使用FillRect()函数绘制两个矩形,使用不同的画刷,并在最后删除了画刷。
代码执行后,你将看到如下两个矩形:
![fillrect_demo3.png](https://cdn.jsdelivr.net/gh/YellowTulipShow/CDN/images/fillrect_demo3.png)
步骤5:结论
FillRect()函数是在Windows编程中常用的绘制矩形的方法之一。它允许我们轻松地使用不同的颜色和图案绘制矩形区域。
在本文中,我们介绍了如何使用FillRect()函数绘制矩形。我们还演示了如何使用不同的画刷来创建具有不同颜色或图案的矩形区域。
我希望这篇文章帮助你理解如何使用FillRect()函数在你的Windows程序中绘制矩形。