码迷,mamicode.com
首页 > Windows程序 > 详细

Windows客户端开发简介(四)

时间:2015-06-10 15:42:46      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

        在上一篇文章里,我简单扼要的给大家介绍了一下GDI的基础知识,包括DCHDCGDI对象等等,总的来说都是些偏理论的知识,属于概念的范畴。

         今天这篇文章里,我就要正式开始有点实际的东西了,我会教大家一些GDI的基本功能代码编写,基本的技巧,当然还有如何避免基本的坑,哈哈,对的,基本的坑而不是高级的。

         那么我要如何说起呢,首先我要告诉大家如何创建DC,如何使用DC,如何设置DC的属性(也就是GDI对象),如何在DC上绘制简单的文字,绘制图形,绘制图片也就是位图。我还会附带的说说GDI+,说说CImage这个绘图超级方便的类(我在我过去的项目中大量的使用了这个类),还要说说圆角窗口的实现,包括用蒙板色的办法和用层叠窗口的办法。当然这么多的内容在这样一篇文章里肯定是写不完的,所以我将在后面的文章里逐一介绍,有兴趣的朋友可以等我一篇一篇婉婉道来。

         首先来谈谈DC的使用

         获取DC的方式有好几种,一般而言有如下几种

         CreateDC,查阅MSDN可知其参数如下:

         HDC CreateDC(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutput,constDEVMODE* lpInitData)

                这个函数的第一个参数lpszDriver,表示你要创建DC的设备,也就是表示你想进行抽象的设备,一般而言可以是显示器或者打印机,因为用于打印的情况比较少,我们这里只讨论“DISPLAY”这个参数的情况。

                当第一个参数为“DISPLAY”时,lpszDevice决定了你要在哪一个显示设备上进行绘制,如果你要在主显示设备上进行绘制,可以这样调用CreateDC

                CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL)

     这个函数的HDC类型返回值,就代表了这个显示设备,有了这个HDC,我们就可以在屏幕上进行绘制了。

     下面再说另外一种获取DC的方式GetDC

     GetDC是基于窗口的,它只有一个HWND类型参数,代表了你想进行绘制的窗口,因为它的用法比较简单,我这里不做多说

    

     说到这里,是不是觉得这两个函数还挺简单,但是在使用CreateDCGetDC创建的DC之后,GDI的对象和资源在使用完毕后都是需要释放的,这里有个常见的坑,我在网上很多的技术博客上看到不少作者都犯了这个错误。

     释放DC有两种函数

     DeleteDCReleaseDC

     那么它二者有什么区别呢?

     查阅MSDN对二者的Remark可知

     An application must not delete a DC whose handle was obtained bycalling the GetDC function. Instead, it mustcall the ReleaseDC function to free the DC.

            An applicationcannot use the ReleaseDC functionto release a DC that was created by calling the CreateDC function; instead, it must usethe DeleteDC function. ReleaseDC mustbe called from the same thread that called GetDC.

            换句话说:CreateDCDeleteDC配对使用,而GetDCReleaseDC配对使用,二者不可替换,用错了释放方法,这是初学者,甚至很多有经验的老鸟都会犯的错误。而且在最后,还需要有一点要注意的,RelaseDC必须在与GetDC相同的线程中进行调用。

      看到这里,大家可能觉得真的细节还是不少的,但这些正是区分一个Windows开发老手和菜鸟的标志,所以对于我们这些Windows开发人员而言,需要注意得到地方的确很多,我们必须一丝不苟的抠每一个API的参数,含义以及坑,这大概也是一种乐趣吧。

                

Windows客户端开发简介(四)

标签:

原文地址:http://blog.csdn.net/oldmanzhao/article/details/46442179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!