博主目前在入门期,文中难免有错误,请大家指正,努力做到基本正确,供有兴趣学习的朋友们看一看。

首先介绍一下WM_PAINT消息
WndProc处理的第二个消息为WM_PAINT。这个消息在Windows程序设计中是很重要的。当窗口显示区域的一部分显示内容或者全部变为“无效”,以致于必须“更新画面”时,将由这个消息通知程序。win32最核心的便是消息循环,我们接收到这个消息之后就进入消息处理;
比如这样:

switch (Message) {/*。。。。。。*/case WM_PAINT:{PAINTSTRUCT ps;BeginPaint(hwnd, &ps);/*。。。。。。*/EndPaint(hwnd, &ps);}/*。。。。。。*/}

绘图就是从这样一个结构开始;
PAINTSTRUCT叫油漆结构,哈哈哈哈,很形象吧,我们先打个一桶油漆,三棵树健康漆就挺好,油漆是我们粉刷的必要条件;油漆结构结构包含应用程序的信息。该信息可用于描述该应用程序拥有的一个窗口的客户端区域,里面有什么呢?

typedef struct tagPAINTSTRUCT { HDC  hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT;

hdc
设备上下文是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的 Windows 数据结构。所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条、形状和文本的 Windows API
fErase
指定后台是否必须被删除。如果应用程序应该擦除背景,那么这个值是非零的。如果没有后台刷创建窗口类,应用程序将负责擦除背景。要了解更多信息,请参阅WNDCLASS结构的hbr后台成员的描述。
rcPaint
指定了一个矩形结构,它指定了绘制绘画的矩形的左上角和右下角,在设备单元中,相对于客户端区域的左上角。
fRestore保留;系统内部使用。
fIncUpdate保留;系统内部使用。
rgbReserved保留;系统内部使用。

BeginPaint()和EndPaint()就不需要说了,就和matlab里的那种差不多意思,我开始吃饭了,我吃好了。就是这样,告诉系统妈妈我要吃饭了,你快做饭,我吃好了,你快收碗。逃:)

中间代码段就是我们画图的地方了,画图函数千千万,我就例举一些常见的;
文本:

int DrawText(HDC hDC,          // handle to DCLPCTSTR lpString, // text to drawint nCount,       // text lengthLPRECT lpRect,    // formatting dimensionsUINT uFormat      // text-drawing options
);

前三个参数不需要细说,见字会意;

LPRECT
不知还记不记得油漆里有个RECT,对就是它,里面规定了一个矩形结构,该结构包含了文本要被格式化的矩形(在逻辑坐标中),加个LP代表指针,我们只需要调用油漆里的就行了;
uFormat
指定格式化文本的方法。该参数可以是下列值中的一个或多个
DT_BOTTOM,啊呀,好多,不详细写了,大家可以自己去MSDN看;
示例:

DrawText(ps.hdc, "你好 ",4, &(ps.rcPaint), DT_CENTER);

一次性绘制多个字符串:

BOOL PolyTextOut(HDC hdc,                // handle to DCCONST POLYTEXT *pptxt,  // array of stringsint cStrings            // number of strings in array
);

第一个和第三个参数不需要多说,第二个参数 POLYTEXT ,这是一个结构体,规定了文本;

typedef struct _POLYTEXT { int  x; int  y; UINT  n; LPCTSTR  lpstr; UINT  uiFlags; RECT  rcl; int  *pdx;
} POLYTEXT, *PPOLYTEXT;

先得定义一个数组用来存放这些信息,然后在绘图函数里调用;x,y是参考点坐标,n是字符串长度,LPCTSTR是文本信息,不需要null,之前指定了长度了,uiflags是文本是否剪切在下面RECT规定的矩形中,最后pdx是指向包含字符串中每个字符宽度值的数组的指针。就是有几个字符给几个宽度值;
示例:

int arr1[2] = { 20,0 };POLYTEXT polys[] = { {50,0,4,"大家",ETO_CLIPPED,ps.rcPaint,arr1 },{ 50,25,4,"新年",ETO_CLIPPED,ps.rcPaint,arr1},{ 50,50,4,"快乐",ETO_CLIPPED,ps.rcPaint,arr1}};PolyTextOut(ps.hdc, &polys[0], 3);//这里数组调用和上面arr1其实都是取首地址的意思

有一个疑问点,如果有朋友知道帮忙评论补充一下,我反复尝试发现,POLYTXT的第三个参数,就是文本长度值必须一样才能正确显示,比如都是4,多退少补。

简单图形:
文本写完来画几个简单的图形。

        HBRUSH hb = CreateSolidBrush(RGB(0, 0, 255));//创建带颜色的画刷HBRUSH orgBrs = (HBRUSH)SelectObject(ps.hdc, hb); Ellipse(ps.hdc, 0, 0, 100, 100);  SelectObject(ps.hdc, orgBrs); //选回画刷Ellipse(ps.hdc, 100, 100, 200, 200);//我画了两个正圆DeleteObject(hb);

入门win32——绘制图形相关推荐

  1. POI的入门:绘制图形

    package com.learn.poi.test;import org.apache.poi.ss.usermodel.*; import org.apache.poi.util.IOUtils; ...

  2. esri-leaflet入门教程(5)- 动态绘制图形

    esri-leaflet入门教程(5)- 动态绘制图形 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚 ...

  3. html5 canvas绘制图形,html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  4. ai怎么让图片任意变形_AI入门基础教程-图形绘制变形及路径查找器

    原标题:AI入门基础教程-图形绘制变形及路径查找器 l 新建: l 界面: 多个预编辑区: l 存储格式: 1. .AI :AI软件默认的存储格式,相当于PS的PSD格式 2. .EPS:使用AI软件 ...

  5. 这么详细的Python matplotlib 绘制图形 还不赶紧收藏

    前言 我们前面对matplotlib模块底层结构学习,对其pyplot类(脚本层)类提供的绘制折线图.柱状图.饼图.直方图等统计图表的相关方法,列举往期文章如下. 超详细的Python matplot ...

  6. Python pyglet 自制3D引擎入门(一) -- 绘制几何体、创建3D场景

    Python作为目前较广泛的编程语言, 用于制作3D游戏可谓得心应手.本文讲解应用Python pyglet库绘制3D场景的入门知识. 下篇:Python pyglet 自制3D引擎入门(二) – 绘 ...

  7. java画布制作弧形文字_QT 使用QPainter 绘制图形 和 世界变换 world transform

    1. 绘制椭圆  饼状型 贝塞尔曲线 绘制图像重写方法 void paintEvent(QPaintEvent *event)即可. void Widget::paintEvent(QPaintEve ...

  8. matlab图形编辑,matlab绘制图形plot属性编辑

    matlab绘制图形plot属性编辑 matlab绘制图形plot属性编辑 使用plot绘制图形函数,设置其中的图形参数,包含线条颜色,粗细,线条类型. x=1:15; y=x.^3; 方法一 是在p ...

  9. 【OpenGL ES】入门及绘制一个三角形

    本文首发于个人博客:Lam's Blog - [OpenGL ES]入门及绘制一个三角形,文章由MarkDown语法编写,可能不同平台渲染效果不一,如果有存在排版错误图片无法显示等问题,烦请移至个人博 ...

最新文章

  1. python代码壁纸-python设置windows桌面壁纸的实现代码
  2. 从零开始入门 K8s | Kubernetes 调度和资源管理
  3. opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)
  4. C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
  5. GIS实战应用案例100篇(二)-元胞自动机模拟城市扩张过程
  6. allow control allow origin_Origin绘图笔记(一)——如何高效绘制一个漂亮的数据图...
  7. (备忘)Java web项目迁移到Centos7中验证码无法显示
  8. Arcgis拓扑检查之面空隙(内附具体操作步骤)
  9. Android 矢量图动画(完结篇)
  10. CCF CSP 201803-1 跳一跳
  11. centos7上先要关闭httpd服务之后再卸载,反正卸载之后就是安装不上一脸懵逼
  12. VUE+Nodejs 商城项目练习项目(前台购物)
  13. 找出1000瓶牛奶中有毒的牛奶
  14. 习题课3-1(动态规划)
  15. 【PAT甲级】1142 Maximal Clique
  16. ctr多少正常_你知道亚马逊的点击率多少算正常的吗?
  17. SAP标准教材名称所代表的模块和含义(转)
  18. SAS中保留t值、F值和Z值的三位小数
  19. bootstrap的导航栏在页面刷新后显示选中
  20. java web编写的在线测试(调查)系统 完整源码 附详细设计文档

热门文章

  1. ubuntu16.04如何安装sougou拼音
  2. php查询google pr值接口api介绍,最新 google pr值查询 接口 php版 示例
  3. 刘强东呼吁大家帮一帮东北经济;滴滴“复活”小蓝单车;苹果股票评级遭下调丨价值早报
  4. AUTOCAD——拉伸命令、拉长命令
  5. 可能会有特殊的客人光顾
  6. ecg去噪 matlab,MATLAB,ECG,去噪,小波
  7. 简单明了的介绍了python面向对象编程
  8. 菜鸟的数据分析学习记005 ---------EB520X--------离散选择模型与联合分析
  9. 孙子兵孙子兵法全文_孙子兵法:如何应用于软件
  10. Python的布尔类型和True/False的各种形式