第5章,[Win32 章节] :边框绘制函数(一)
2026/8/12 17:04:45 网站建设 项目流程

专栏导航

上一篇:第5章,[Win32 章节] :直线练习程序2

回到目录

下一篇:第5章,[Win32 章节] :边框绘制函数(二)

本节前言

对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。

我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。

本来呢,写完了上一节的文章以后,我打算紧接着就去将佩措尔德教材中的正弦波程序给贴出来的。然而呢,我改变了主意。

关于佩措尔德原教材的正弦波程序,我一定会讲的。然而,此刻,我认为还不是时候。以后,等到时机合适了,我们再来研究正弦波程序。

本节,我依然是抄录佩措尔德原教材的一段内容。

一. 本节内容

接下来讨论 Arc 函数,它将绘制椭圆弧线。然而,如果不先介绍一下 Ellipse 函数,那么 Arc 函数没有多大意义。而如果不先讨论 Rectangle 函数,那么 Ellipse 函数也没有多大意义。而如果要讨论 Ellipse 和 Rectangle 函数,则也免不了要介绍 RoundRect、Chord 和 Pie 函数。

问题是,Rectangle、Ellipse、RoundRect、Chord 和 Pie 函数严格来说并不是画线函数。的确,这些函数是在画线,但是同时它们还使用当前填充区域的画刷来填充一个封闭的区域。因为这个画刷默认是纯白色,所以当第一次使用这些函数时,你可能不会注意到这些函数除了画线还做了其他一些事。这些函数都属于后面的 “绘制填充区域” 章节所要讲的内容。不管怎样,我会在这里讨论它们。

前面列举得函数非常相似,因为它们基于一个矩形的 “边框” 来绘图。首先定义一个正好可以容纳这个绘图对象的一个矩形框,即边框,然后 Windows 在这个框内绘制该对象。

画矩形是这些函数中最简单的一个:

Rectangle (hdc, xLeft, yTop, xRight, yBottom);

点(xLeft, yTop)是矩形左上角的坐标,点(xRight, yBottom)是矩形右下角的坐标。使用 Rectangle 函数绘制的矩形,它的边总是与显示器的长和宽平行。

我们来写一个小程序。

二. 本节程序

/*------------------------------------------------------------ WinMain.cpp:绘制两个矩形。 ------------------------------------------------------------*/ #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("Rectangle_Lx01"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; if (!RegisterClass(&wndclass)) { MessageBox(NULL, TEXT("注册窗口类失败!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppName, // window class name TEXT("The Rectangle_Lx01 Program"), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL); // creation parameters ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; int x1, x2, y1, y2; switch (message) { case WM_CREATE: return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); x1 = 60; x2 = 360; y1 = 60; y2 = 210; Rectangle(hdc, x1, y1, x2, y2); x1 = 200; x2 = 700; y1 = 300; y2 = 430; Rectangle(hdc, x1, y1, x2, y2); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }

程序不难。编译方法,如果你忘了,请参阅下文。

参考课节:用 VS2019 编写C语言程序

程序的运行结果如下。

图1

本节程序还是不难的。

不过呢,关于 Rectangle 函数,我们还得讲一讲关于它的一点知识。这点知识,我们留待下一节来讲。

专栏导航

上一篇:第5章,[Win32 章节] :直线练习程序2

回到目录

下一篇:第5章,[Win32 章节] :边框绘制函数(二)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询