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

📅 2026/8/12 17:04:53
第5章,[Win32 章节] :边框绘制函数(一)
专栏导航上一篇第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 章节] 边框绘制函数二