GDI(图形设备接口)编程(一)设备环境的获取
来源:互联网 发布:华为直播软件安装 编辑:程序博客网 时间:2024/05/17 02:17
GDI (Graphic Device Interface)中文解释 图形设备接口,顾名思义肯定图形设备有关,这个关联就是设备环境(也称为DC),事实上大多数GDI函数都需要传入一个HDC类型的参数,这个参数就是设备环境句柄(Window内部用来唯一标识对象的一个32位无符号整数)。设备环境句柄是程序窗口使用GDI函数的“通行证”。设备环境(DC)实际上是GDI内部维护的一个数据结构。设备环境中的某些值是图形的“属性”。这些属性决定了GDI绘图函数的细节。当程序完成了对客户区的绘制后,必须释放设备环境句柄。在程序释放完句柄后
这个句柄不再有效并且不能被使用。程序必须在处理同一条消息的过程中获取句柄和释放句柄。不能再两条消息中间传递一个设备环境句柄,唯一的例外是通过CreateDC函数创建的设备环境句柄。
获取HDC句柄主要有以下三个函数BeginPaint(),GetDC,GetWindowDC。
BeginPaint函数原型
HDCWINAPIBeginPaint( HWND hWnd, LPPAINTSTRUCT lpPaint);与EndPaint(释放环境句柄)成对使用
第一个参数是一个窗口句柄,第二个参数是一个指向绘制信息结构的指针,返回值为设备环境句柄。BeginPaint第二个参数通常传入一个PAINTSTRUT地址,Begin函数会填充该该结构的各个字段。每个窗口都维护着一个该结构。
PAINTSTRUCT定义如下:
typedef struct tagPAINTSTRUCT{HDC hdc;BOOL fErase;RECT rcPaint;BOOL frestore;BOOL fIncUpdate;BYTE rgbReserved;}PAINTSTRUCT;
程序只能使用前三个字段,其他的字段供windows内部使用。hdc字段是设备环境句柄。大多数情况下fErase字段都是FALSE。这意味着windows在先前的BeginPaint函数已经擦除了无效区域的背景(如果想自己定义背景擦除方式,必须自己处理WM_ERASEBKGND消息)。在WinMain初始化时,用于注册窗口类的WNDCLASS结构中的hbrBackground字段指定了一个画刷,windows就是用这个画刷来擦除背景的。但是如果当程序调用InvalidateRect使客户区矩形无效时,InvalidateRect的最后一个参数将指定背景是否擦除。如果参数是FALSE,Windows将不会擦除背景,同时在调用Begin函数时,PAINTSTRUC中的fErase字段的值将是TRUE。rcPaint字段是一个RECT结构类型的字段。RECT结构定义如下:
typedef struct tagRECT{ LONG left; LONG top; LONG right; LONG bottom;} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
rcPaint结构定义了一个无效矩形的边界。RECT的四个成员都是以像素为单位的,并且相对于客户区的左上角。
rcPaint不仅是一个无效矩形还是一个裁剪矩形。这意味着Windows将会把绘制限制在该矩形内。如果无效区域不是一个矩形,windows将会把绘制限制在这个区域内。
GetDC函数原型如下:
HDCWINAPIGetDC( HWND hWnd);
与ReleaseDC成对使用。
GetDC返回的设备句柄的裁剪区是整个客户区。这意味着你可以在客户区的任意部分绘制,而不仅仅是无效区域,也就是如果不存在无效区域也没关系。与BeginPaint不同
GetDC不会使无效区域有效化。如果想整个客户区有效可以这样:
ValidateRect(hwnd,NULL);通常GetDC和Release函数用于处理键盘和鼠标消息。使用这个函数,程序可以在收到鼠标或者键盘消息时及时地绘制客户区,而不必要生产WM_PAINT消息去刻意使客户区
部分无效化。但是在处理非WM_PAINT消息时,它仍然要收集足够的信息以便在收到WM_PAINT消息时更新显示。
GetWindowDC函数 原型如下:
HDCWINAPIGetWindowDC( HWND hWnd);与GetDC相比,GetDC返回的是客户区的设备环境句柄,而GetWindowDC返回的是整个窗口的设备句柄。程序可以使用从GetWindowDC返回的设备环境句柄在窗口标题栏输出,相应的必须处理WM_NCPAINT(非客户区绘制)消息
- GDI(图形设备接口)编程(一)设备环境的获取
- GDI 图形设备接口
- 图形设备接口(GDI)
- GDI图形设备接口
- 图形设备接口(GDI)
- 图形设备接口 GDI
- GDI图形设备接口
- GDI-图形设备接口
- GDI(图形设备接口)编程(二)TextOut
- Windows的图形设备接口(GDI)
- 图形设备接口(GDI)
- GDI+ (.NET的图形设备接口)简介
- Windows的图形设备接口(GDI)入门 上篇
- MFC入门(六) 图形设备接口GDI
- MFC入门(六) 图形设备接口GDI
- GDI(Graphics Device Interface), 图形设备接口
- 图形设备接口(GDI)与设备描述表(DC)
- 图形设备接口(GDI)与设备描述表(DC)
- Nginx+tomcat负载均衡session问题解决
- 与代码无关
- Event.keycode
- 最新Subversion(SVN)权限控制配置详解
- ASP.NET设置Session过期时间
- GDI(图形设备接口)编程(一)设备环境的获取
- maven2之m2eclipse使用手册之二m2eclipse功能介绍
- ogre1.7.2 鼠标独占问题(鼠标移出窗口)
- Page_Load上面的代码使用——ViewState,Session,Static,Linq
- adb shell 无法启动 (insufficient permissions for device)
- 嵌入式Linux之我行——PWM在ARM Linux中的原理和蜂鸣器驱动实例开发
- CSS中 clear.both 的使用
- 让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一的Launcher.
- Hibernate映射文件配置技巧 .