![第5章,[Win32 章节] :直线练习程序1](http://pic.xiahunao.cn/yaotu/第5章,[Win32 章节] :直线练习程序1)
专栏导航上一篇第5章[Win32 章节] 绘制直线三回到目录下一篇第5章[Win32 章节] 直线练习程序2本节前言对于本节所讲解的知识有可能你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点请你自行查阅。我呢也会提到一部分的参考课节。但是呢你不应该依赖于我的主动提及。最好呢你自己能够多去了解和查看本专栏目录。学习本节之前需要先学习以下的先修课节。参考课节第5章[Win32 章节] 绘制直线一参考课节第5章[Win32 章节] 绘制直线二参考课节第5章[Win32 章节] 绘制直线三在佩措尔德原教材里面他在讲解完了直线的知识以后直接就给出了一个程序是绘制正弦波的程序。画正弦波的程序我们也会给出。但是我觉得直接给出这么难得程序还是突兀了一些。在给出正弦波程序之前我们先来几个练习程序。本节我们给出的程序它使用两种方法来绘制直线且用直线段来绘制矩形。我们开始。一. 本节程序/*------------------------------------------------------------ LX_Line01 -- 用两种方法通过绘制直线的方式来绘制矩形。 水饺编程2026 ------------------------------------------------------------*/ #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(LX_Line01); 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(直线练习01), // 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 i, length; TCHAR str[30]; POINT arr_pt00[5] { 100, 30, 200, 30, 200, 60, 100, 60, 100, 30 }; POINT arr_pt01[5] { 100, 230, 200, 230, 200, 260, 100, 260, 100, 230 }; switch (message) { case WM_CREATE: return 0; case WM_PAINT: hdc BeginPaint(hwnd, ps); MoveToEx(hdc, arr_pt00[0].x, arr_pt00[0].y, NULL); for (i 1; i 5; i) LineTo(hdc, arr_pt00[i].x, arr_pt00[i].y); length wsprintf(str, TEXT(使用 MovetoEx 和 LineTo 来绘制矩形)); TextOut(hdc, 300, 36, str, length); Polyline(hdc, arr_pt01, 5); length wsprintf(str, TEXT(使用 Polyline 来绘制矩形)); TextOut(hdc, 300, 236, str, length); EndPaint(hwnd, ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }二. 程序编译在我这里我使用 VS2019 新建了一个解决方案并将解决方案名称和项目名称都命名为【LX_Line01】。然后呢我在项目里面添加了一个源文件文件名为【WinMain.cpp】。源文件中的代码就是本篇文章第一分节中的代码。编译好了程序以后运行结果如下。图1结束语本节程序还是比较简单的。下一节我们来绘制一个复杂一些的图。专栏导航上一篇第5章[Win32 章节] 绘制直线三回到目录下一篇第5章[Win32 章节] 直线练习程序2