• 网站刚刚上线,难免有不足的地方,敬请谅解!欢迎提出宝贵意见!

  •    3年前 (2015-07-09)  windows开发 专业技术 |   5 条评论  551 
    文章评分 1 次,平均分 5.0

    【Windows编程】系列第五篇:GDI图形绘制

    上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图。Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解。GDI可以绘制点、直线曲线、填充封闭区域、位图以及文本,其中文本部分已经在上一篇中将了,请参考【Windows编程】系列第三篇:文本字符输出

    跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我们知道,HDC可以在处理WM_PAINT的时候用BeginPaint函数获取,也可以从GetDC、GetWindowDC拿到。

    既然是画图,就少不了颜色的描述,Windows中的颜色有几种表示,其中COLORREF在GDI绘制中用的最多,它实际上是一个无符号32为整型。其中红、绿、蓝各占一个字节,最高字节不使用,如下图所示:

    【Windows编程】系列第五篇:GDI图形绘制

    该值可以用Windows提供的RGB宏来生成,Windows中RGB的定义为:

     

    除此之外,Windows还有结构体RGBQUAD也表示颜色,这种一般用于位图结构信息中。

    • 画像素点

    Windows提供了SetPixel和GetPixel函数来设定和获取像素点的颜色。函数原型为:

     

    该函数并不常使用。

    • 画笔画刷

    在图形绘制之前,可以创建画笔给后续的画图使用,创建画笔的API函数为:

     

    它可以指定画笔风格,宽度和颜色。风格可以是实线、虚线、点虚线等,具体参考MSDN说明的各种类型。

    • 画线条

    Windows提供的画线条函数有十几个,常用的直线绘制为LineTo,多条线段一般用Polyline、PolylineTo、PolyPolyine等,曲线可以画椭圆、椭圆弧、贝塞尔样条曲线。这些函数的原型请参考MSDN,后面我们将用实例来演示这些函数的用法。

    • 封闭区域填充

    Windows的绘图如果是一个封闭区,则内部是可以填充的,当然如果你不显示填充,系统会用默认颜色来填,比如窗口背景色。我们也可以在绘制封闭图形之前创建画刷,如果把创建的画刷选入设备环境中,系统将用画刷填充内部区。常见的会封闭的绘图API函数有画直角矩形Rectangle、圆角矩形RoundRect、椭圆Ellipse、扇形图Pie以及弦割图Chord。

    • 位图输出

    Windows关于位图的输出内容很多,包括设备相关和设备无关位图、以及位块转移、透明、缩放等等,本文仅针对位图画刷进行实例演示,其他内容将来可单独写一篇介绍。用位图做画刷时先要使用LoadImage函数加载位图文件,然后用CreatePatternBrush创建一个模式画刷即可。

    • 文本输出

    这个在前面已经讨论过了,请参考【Windows编程】系列第三篇:文本字符输出一文。

    • 绘图属性

    在绘制图形时,环境设备有5个属性会影响大多数绘图:

    画笔位置:在画线条时,会从画笔所在的位置开始画,画笔位置可以用MoveToEx函数来设置。

    画笔:绘图时会采用当前环境中的画笔进行绘制,如果显示不创建,将会用系统默认的画笔。

    背景:某些GDI会有透明和不透明的设置。

    背景颜色:比如文本输出的间隙颜色。

    绘制模式:比如划线是可以设置实线、虚线等,填充时可能有不同的填充绘制模式。

    下面我们通过一个完整的实例,来演示上面这些常见函数的具体运用以及实际使用效果。

     

    本实例运行结果如下图所示,图中可以看到线条不平滑,这是因为Win32的画图函数是没有抗锯齿功能的,图越小,锯齿越明显。可以使用微软提供的GDI+绘图函数,具有抗锯齿效果。

    【Windows编程】系列第五篇:GDI图形绘制

    Windows的GDI基本绘制其实并不难掌握,只要仔细阅读MSDN上API的详细使用说明就一定能正确使用,但是在创建GDI对象并使用后,一定要记得释放。

    更多经验交流可以加入Windows编程讨论QQ群454398517

     

    关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。

    【Windows编程】系列第五篇:GDI图形绘制

    转载请注明出处,谢谢合作!

     

     

    本文原始地址:http://www.coderonline.net/programming-windows-series-fifth-article-gdi-graphics.html

    本站所有文章,除特别注明外,均为本站原创,转载请注明出处来自http://www.coderonline.net/

    否则保留追究法律责任的权利!

    关于

    发表评论

    表情 格式
    1. Hi my name is Britney and I just wanted to drop you a quick message here instead of calling you. I came to your 【Windows编程】系列第五篇:GDI图形绘制 – 程序员互动联盟 page and noticed you could have a lot more hits. I have found that the key to running a successful website is making sure the visitors you are getting are interested in your subject matter. There is a company that you can get keyword targeted visitors from and they let you try the service for free for 7 days. I managed to get over 300 targeted visitors to day to my site. http://likes.avanimisra.com/4ox2

      Britney 评论达人 LV.1 2年前 (2016-12-01) [0] [0]
    2. Hi my name is Britney and I just wanted to drop you a quick message here instead of calling you. I discovered your 【Windows编程】系列第五篇:GDI图形绘制 – 程序员互动联盟 website and noticed you could have a lot more traffic. I have found that the key to running a successful website is making sure the visitors you are getting are interested in your website topic. There is a company that you can get keyword targeted visitors from and they let you try their service for free for 7 days. I managed to get over 300 targeted visitors to day to my website. http://kbbl.ir/my

      Britney 评论达人 LV.1 2年前 (2016-11-28) [0] [0]
    3. 谁然没搞过但是还是点赞

      angel 评论达人 LV.5 3年前 (2015-07-11) [0] [0]
    4. 这个系列看到好几篇,作者辛苦了,近几年windows编程的好文章不多了,赞

      麦子熟了 博 主 3年前 (2015-07-10) [0] [0]
    5. 希望这个系列继续

      raul 评论达人 LV.5 3年前 (2015-07-09) [0] [0]
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册