Windows客户端开发简介(四)
在上一篇文章里,我简单扼要的给大家介绍了一下GDI的基础知识,包括DC,HDC,GDI对象等等,总的来说都是些偏理论的知识,属于概念的范畴。
今天这篇文章里,我就要正式开始有点实际的东西了,我会教大家一些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类型参数,代表了你想进行绘制的窗口,因为它的用法比较简单,我这里不做多说
说到这里,是不是觉得这两个函数还挺简单,但是在使用CreateDC和GetDC创建的DC之后,GDI的对象和资源在使用完毕后都是需要释放的,这里有个常见的坑,我在网上很多的技术博客上看到不少作者都犯了这个错误。
释放DC有两种函数
DeleteDC,ReleaseDC
那么它二者有什么区别呢?
查阅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.
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71064.html