发布时间:2026/7/17 6:44:59
第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

相关新闻

2026/7/17 6:44:59

C++函数化编程实战:学生成绩管理系统设计与算法实现

1. 项目概述与核心价值最近在带几个刚学完C基础语法的学弟学妹做项目,发现他们最头疼的就是不知道如何把书本上的零散知识点(比如数组、函数、结构体)串成一个能实际运行的程序。正好,一个经典的“学生成绩管理系统”需求摆在了面…

2026/7/17 6:39:58

Ubuntu下ChatGLM2-6B环境搭建与P-Tuning微调实战

1. 项目概述最近在Ubuntu系统上搭建ChatGLM2-6B环境并进行P-Tuning微调训练时,踩了不少坑。作为一个开源的中文大语言模型,ChatGLM2-6B在中文处理方面表现优异,但在实际部署和训练过程中会遇到各种问题。本文将详细记录从环境搭建到微调训练的…

2026/7/17 6:39:58

Shell变量基础与进阶:从入门到精通

Shell 变量基础知识 变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存空间中变量的名字就可以取出与变量对应的数据。 变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时…

2026/7/17 7:45:02

Memcached数据安全实践:服务端存储加密引擎设计与实现

1. 项目概述:为什么Memcached需要存储加密?在分布式缓存的世界里,Memcached以其简单、高效、高性能的特性,长期占据着关键位置。无论是电商秒杀、社交动态,还是实时推荐,它都是扛住高并发流量的无名英雄。然…

2026/7/17 7:45:02

Godot引擎中Lambda函数的使用与优化

1. Godot引擎中的Lambda函数解析在Godot游戏引擎中,Lambda函数(也称为匿名函数)是一种强大的编程工具,它允许开发者在不定义完整函数的情况下创建可调用的代码块。这种特性在GDScript中尤为实用,可以简化代码结构并提高…

2026/7/17 7:45:02

C++高性能线程安全内存池:从原理到实现

1. 项目概述:为什么我们需要一个高性能的线程安全内存池?在C的世界里,尤其是在高并发、低延迟的服务器开发、游戏引擎或者高频交易系统中,内存管理往往是性能瓶颈的“重灾区”。标准库的new和delete(或malloc/free&…

2026/7/17 7:45:02

RA8D1开发板OSPI-Flash驱动优化与实战应用

1. RA8D1-Vision Board开发板与OSPI-Flash基础认知第一次拿到RA8D1-Vision Board这块开发板时,最吸引我注意的是板载的那颗OSPI-Flash芯片。作为嵌入式开发者,我们都知道外部存储对物联网设备的重要性——它既要能快速启动系统,又要能安全存储…

2026/7/17 7:45:02

macOS Ventura下Nginx启动问题的解决方案

1. 问题背景与现象描述最近升级到macOS Ventura 13.3后,很多开发者发现通过Homebrew安装的Nginx服务无法正常启动。这个问题在技术社区引发了广泛讨论,我也在升级系统后第一时间遇到了这个困扰。典型错误表现为以下几种情况:执行brew service…

2026/7/17 7:40:01

5分钟深度探索:QtScrcpy如何重新定义Android投屏体验

5分钟深度探索:QtScrcpy如何重新定义Android投屏体验 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 你是否曾想过,将手机屏幕无缝投射到电脑上,…

2026/7/17 5:59:06

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/17 1:21:45

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/17 7:39:19

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/17 0:04:23

BiSheng JDK-build性能调优:构建速度提升30%的优化策略

BiSheng JDK-build性能调优:构建速度提升30%的优化策略 【免费下载链接】bishengjdk-build BiSheng JDK build and test scripts - common across all releases/versions 项目地址: https://gitcode.com/openeuler/bishengjdk-build 前往项目官网免费下载&am…

2026/7/16 13:58:36

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…