查看代码


#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. nginx-tengine-invalid IPv6 address in resolver-解析器中无效的IPv6地址

    问题描述:解析器中无效的IPv6地址 [root@dm ~]# nginx -t nginx: [emerg] invalid IPv6 address in resolver "[fe80 ...

  2. 【Word】文献引用批量上标

    \[([0-9]{1,2})\]

  3. Qt加载天地图离线api开发包/从官网趴地图js代码/费了九牛二虎之力终于搞定

    一.前言说明 网上关于如何趴天地图离线api文件的文章,只有少量的两三篇,而且几乎没有说全和说对,搞得评论也是一片懵逼,这里不行那你不行,思路可以借鉴就是.索性花了点时间,自己研究了如何从官网一步步趴 ...

  4. Qt编写推流综合应用示例-文件推流

    一.功能特点 1.1 文件推流 指定网卡和监听端口,接收网络请求推送音视频等各种文件. 实时统计显示每个文件对应的访问数量.总访问数量.不同IP地址访问数量. 可指定多种模式,0-直接播放.1-下载播 ...

  5. Qt编写物联网管理平台31-用户权限管理

    一.前言 随着需求的不断变化,功能的增多,在用户信息这块,除了需要用户登录退出验证以外,还需要有个简单的用户权限逻辑处理,比如限定某些用户只有查看权限,没有删除记录.清空记录.系统设置的权限,与之相对 ...

  6. Qt编写安防视频监控系统68-兼容Qt4到Qt6

    一.前言 为了从Qt4.7兼容到Qt6.2及后续版本,着实花了不少精力,前提也是对自定义控件大全和各种跨平台的轮子组件全部做成了兼容Qt4到Qt6,这样只剩下UI这块需要兼容就好办多了,各个击破战略, ...

  7. C#HTTP网络请求时GetResponseAsync()方法抛出“远程服务器返回错误: (411) 所需的长度”异常

    在请求HttpWebRequest的报了如下的错误"远程服务器返回错误: (411) 所需的长度",结果网上 百度了一下说,再请求POST的时候,若没有参数的情况下,需要将进行如下 ...

  8. IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf

    本文由sweetying分享,为了更好的阅读体验,有较多的内容修订和排版优化. 1.前言 最近我负责的 LiveChat 客服聊天系统到了自研阶段,任务类似于做一个腾讯云IM这样的通信层SDK.在和后 ...

  9. 成为百万架构师的第一课:设计模式:Spring中的设计模式

    本文原文地址 Spring5 源码分析 一·.Spring 中常用的设计模式 1.我们通常说的23种经典设计模式: 分类 设计模式 创建型 工厂方法(Factory Method).抽象工厂模式(Ab ...

  10. 内存吞金兽(Elasticsearch)的那些事儿 -- 架构&三高保证

    系列目录 内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下 内存吞金兽(Elasticsearch)的那些事儿 -- 数据结构及巧妙算法 内存吞金兽(Elasticsearch)的那 ...