查看代码


#include <Windows.h>
//画点
void PaintSetPixel(HDC hdc) {
for (short i = 0; i < 20; i++)
{
SetPixel(hdc, 30, 30 + i, RGB(0, 0, 255));
} }
//画线
void PaintLine(HDC hdc) {
//从坐标(50,50)画到坐标(200,50)
MoveToEx(hdc, 50, 50, NULL);
LineTo(hdc, 200, 50);
}
//画一个矩形
void PaintRect(HDC hdc) {
//绘制普通举矩形:从左上角坐标(100,00)到右下角坐标(200,200)
//Rectangle(hdc, 100, 100, 200, 200);
//绘制圆角矩形 从左上角坐标(100,00)到右下角坐标(200,200) (30,30)表示圆角宽度和高度
RoundRect(hdc, 100, 100, 600, 600, 30, 30);
}
//画圆 椭圆
void PaintEllipse(HDC hdc) {
//圆形左上角坐标(50,50) 右下角坐标(100,100)
Ellipse(hdc, 50, 50, 100, 300);
}
//画弧线
void PaintArc(HDC hdc) {
Arc(hdc, 100, 100, 400, 400, 150, 50, 50, 150);
}
//画扇形
void PaintPie(HDC hdc) {
Pie(hdc, 100, 100, 400, 400, 300, 50, 50, 300);
}
//自定义过程函数
//参数 HWND:窗口的句柄 message:消息ID 附加消息信息 附加消息信息
LRESULT CALLBACK MyWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);
//PaintLine(hdc);
//PaintSetPixel(hdc);
//PaintRect(hdc);
//PaintEllipse(hdc);
//PaintArc(hdc);
PaintPie(hdc);
EndPaint(hwnd, &ps);
break;
} default:
return DefWindowProcW(hwnd, message, wParam, lParam);
}
return DefWindowProcW(hwnd, message, wParam, lParam);
}
//void OnPaint(HDC hdc) {
// Graphics graphics(hdc);
//}
int WINAPI WinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nShowCmd) {
//声明窗口类
WNDCLASS wndClass;
//CS_NOCLOSE 禁止系统菜单的关闭选项
wndClass.style = CS_HREDRAW | CS_VREDRAW;//窗口类样式
wndClass.lpfnWndProc = MyWndProc;//窗口过程函数
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 = L"caoruipeng";//窗口类名称
//注册窗口类
if (!RegisterClass(&wndClass)) {
MessageBox(NULL, L"无效的窗口类", L"错误提示", MB_OK);
return FALSE;
} //创建窗口
HWND hwnd = CreateWindow(L"caoruipeng",//窗口类名称 注册窗口类的名称
L"第一个窗口程序",//窗口标题
WS_OVERLAPPEDWINDOW,//窗口样式
CW_USEDEFAULT,//窗口位置x坐标
CW_USEDEFAULT,//窗口位置y坐标
CW_USEDEFAULT,//窗口宽度
CW_USEDEFAULT,//窗口高度
NULL,//此时窗口无父窗口
NULL,//此时窗口无子菜单
hInstance,//创建窗口的应用程序句柄
NULL
); //展示窗口
ShowWindow(hwnd, nShowCmd); //绘制用户区域
UpdateWindow(hwnd); MSG msg;
//如果检索WM_QUIT消息 返回0,其他返回非0 返回0的时候,会跳出循环,结束程序
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);//翻译消息
//将消息分发给窗口过程函数 返回窗口过程函数返回的值 通常忽略该值
DispatchMessage(&msg);
}
return msg.wParam;
}

win32绘图:绘制直线 矩形 圆形 曲线等的更多相关文章

  1. Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)

    控制台程序. import javax.swing.JComponent; import java.util.*; import java.awt.*; import java.awt.geom.*; ...

  2. [BCB] C++ Builder 绘图 绘制直线 —— 基于像素

    大三的这前半个学期了,又遇上了这个精通(滑稽) Delphi的老师,人还挺好的其实. 关于他对分辨率的吐槽呀,对Delphi的赞美啊,都是非常幽默的.另外我倒是很欣赏他对他的笔记本的保养[dell i ...

  3. c# 动态绘制直线和曲线

    c# 动态绘制直线和曲线   在本案例中利用Graphics对象动态地绘制直线和曲线.程序运行后,选择“直线”单选按钮,然后按下鼠标左键拖动鼠标就可以绘制直线,选择“曲线”单选按钮,然后移动鼠标就可以 ...

  4. 【Qt开发】Qt在QLabel(QWidget)鼠标绘制直线和矩形框

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://devbean.blog.51cto.com/448512/243546 说实话, ...

  5. [C#绘图]在半透明矩形上绘制字符串

    首先要绘制一个半透明的矩形,用到的方法当然是FillRectangle().这个函数在调用的时候除了要指明要绘制的矩形外,还要指明填充矩形的背景色.具体的方法就是在绘制矩形的时候传给它一个画刷Brus ...

  6. 学习Canvas绘图与动画基础 绘制直线(二)

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...

  7. canvas绘制直线

    HTML5 <canvas>元素用于图形的绘制,该元素只是图形容器,必须使用javascript脚本绘制图形创建一个画布:<canvas id="myCanvas" ...

  8. canvas学习笔记(上篇)-- canvas入门教程 -- canvas标签/方块/描边/路径/圆形/曲线

    [上篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  9. html5--5-2 绘制直线

    html5--5-2 绘制直线 学习要点 如何在HTML5文档中添加canvas元素 canvas的属性 了解canvas坐标系 了解script元素 绘制一条直线(准确的说是线段) 什么是canva ...

  10. 第一课、OpenGL绘制直线等等

    第一课.OpenGL绘制直线等等 分类: [开发技术]OpenGL 2012-01-18 14:59 5217人阅读 评论(0) 收藏 举报 buffer图形c // //  main.c //  o ...

随机推荐

  1. JAVA中的时区设置

    JAVA中的时区设置 第一种方式.通过代码指定.   final TimeZone timeZone = TimeZone.getTimeZone("GTM+8");   Time ...

  2. 在不同操作系统上安装 PostgreSQL

    title: 在不同操作系统上安装 PostgreSQL date: 2024/12/26 updated: 2024/12/26 author: cmdragon excerpt: PostgreS ...

  3. 关于QCustomPlot超级图表的一些冷知识点

    开源的图表控件QCustomPlot很经典,作者至少是八星斗圣级别,在曲线数据展示这块性能彪悍,总结了一些容易忽略的经验要点. 可以将XY轴对调,然后形成横向的效果,无论是曲线图还是柱状图,分组图.堆 ...

  4. Qt编写的项目作品32-定制化安装包工具(雨田哥作品)

    一.功能特点 纯Qt编写,跨平台. 支持自定义安装目录等. 安装和卸载界面可自定义. 一键式脚本build.bat,生成安装包EXE. 兼容XP系统. 支持配置文件填充安装包信息. 指定应用程序中文名 ...

  5. OpenWrt安装腾讯云DDNS插件

    1.插件介绍 OpenWRT TencentDDNS插件是一款腾讯云研发的,自动映射动态公网IP至用户指定的DNSPod域名解析记录的官方插件. 标题 名称 中文名称 腾讯云DDNS插件 英文名称 l ...

  6. [转]fatal: remote error: The unauthenticated git protocol on port 9418 is no longer support问题解决

    背景 因为居家办公,把代码从远程clone下来之后,发现使用npm install一直失败. 提示的错误:fatal: remote error: The unauthenticated git pr ...

  7. [转]Vetur can't find `tsconfig.json` or `jsconfig.json` in d:\VueProjects\myroute.

    vue界面启动项目 visual code报错 如下图,找到 Ignore Project Warning 前边打上对勾

  8. MySql 建表出现的问题 : [ERR] 1064 - You have an error in your SQL syntax; check the manual.......

    使用 MySql 建表出现的问题 在使用 Navicat Premium 运行 sql 语句进行建表时,MySQL 报错如下: 1064 - You have an error in your SQL ...

  9. Ant和Ivy集成部署和使用

    Apache Ivy是专门用来管理项目的jar包依赖的.我们知道Maven已经有很出色的这方面的功能,如果你已经在使用Maven,就没必要使用Ivy了.但是其实Maven除了这方面功能,还有很多强大的 ...

  10. 长连接网关技术专题(十一):揭秘腾讯公网TGW网关系统的技术架构演进

    本文由腾讯技术团队peter分享,原题"腾讯网关TGW架构演进之路",下文进行了排版和内容优化等. 1.引言 TGW全称Tencent Gateway,是一套实现多网统一接入,支持 ...