首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一下在windows开发中到底什么是设备内容句柄,作用是什么

2012-03-19 
请教一下在windows开发中到底什么是设备内容句柄,作用是什么?小弟以前是作.net开发的对win32的开发不是很

请教一下在windows开发中到底什么是设备内容句柄,作用是什么?
小弟以前是作.net开发的对win32的开发不是很了解。最近看了很多关于win32图形绘制的资料。但是设备内容句柄这个东西感觉有点模糊。在这里请高手给我解释一下设备内容句柄到底是什么东西。有什么作用。

[解决办法]
以前看过些设备句柄的说法,有的说是某类对象的指针(地址),有的说不是.不管他是不是地址,
但实际上他的功能,跟一个对象的地址是一样的,我把句柄输出后,其值就是一地址的表式方式一样,也是0x333..等等这种,所以,我就直接拿当地址用了.
[解决办法]
设备描述表概述
当一个应用程序使用GDI函数时,必须先装入特定的设备驱动程序,然后为绘制窗口准备设备描述表,比如指定线的宽度和颜色、刷子的样式和颜色、字体、剪裁区域等等。不像其他Win32结构,设备描述表不能被直接访问,只能通过系列Win32函数来间接地操作。

如同Windows“窗口类”一样,设备描述表也是一种Windows数据结构,用来描述绘制窗口所需要的信息。它定义了一个坐标映射模式、一组GDI图形对象及其属性。这些GDI对象包括用于画线的笔,绘图、填图的刷子,位图,调色板,剪裁区域,及路径(Path)。

表2-2列出了设备描述表的结构和各项缺省值,表2-3列出了设备描述表的类型,表2-4显示设备描述表的类型。

表2-2 设备描述表的结构

属性
缺省值

Background color
Background color setting from Windows Control Panel (typically, white)

Background mode
OPAQUE

Bitmap
None

Brush
WHITE_BRUSH

Brush origin
(0,0)

Clipping region
Entire window or client area with the update region clipped, as appropriate. Child and pop-up windows in the client area may also be clipped



Palette
DEFAULT_PALETTE

Current pen position
(0,0)

Device origin
Upper left corner of the window or the client area

Drawing mode
R2_COPYPEN

Font
SYSTEM_FONT (SYSTEM_FIXED_FONT for applications written to run with Windows versions 3.0 and earlier)


Intercharacter spacing
0

Mapping mode
MM_TEXT

Pen
BLACK_PEN

Polygon-fill mode
ALTERNATE

Stretch mode
BLACKONWHITE

Text color
Text color setting from Control Panel (typically, black)

Viewport extent
(1,1)

Viewport origin
(0,0)

Window extent
(1,1)

Window origin
(0,0)


 

表2-3 设备描述表的分类

Display
显示设备描述表,提供对视频显示设备上的绘制操作的支持

Printer
打印设备描述表,提供对打印机、绘图仪设备上的绘制操作的支持

Memory
内存设备描述表,提供对位图操作的支持

Information
信息设备描述表,提供对操作设备信息获取的支持


表2-3中的显示设备描述表又分三种类型,如表2-4所示。

表2-4 显示设备描述表的分类

名称
特点
功能

Class Device

Contexts
提供对Win16的向后兼容
 
Common

Device

Contexts
在Windows系统的高速缓冲区,数量有限
Applicaion获取设备描述表时,Windows用缺省值初始化该设备描述表,Application使用它完成绘制操作,然后释放

Private

Device

Contexts
没有数量限制,用完不需释放一次获取,多次使用
多次使用过程中,每次设备描述表属性的任何修改或变化都会被保存,以支持快速绘制


(1)使用设备描述表的步骤

要使用设备描述表,一般有如下步骤:

获取或者创建设备描述表;
必要的话,改变设备描述表的属性;
使用设备描述表完成绘制操作;
释放或删除设备描述表。
Common设备描述表通过::GetDC,::GetDCEx,::BeginPaint来获得一个设备描述表,用毕,用::ReleaseDC或::EndPaint释放设备描述表;

Printer设备描述表通过::CreateDC创建设备描述表,用::DeleteDC删除设备描述表。

Memory设备描述表通过::CreateCompatibleDC创建设备描述表,用::DeleteDC删除。

Information设备描述表通过::CreateIC创建设备描述表,用::DeleteDC删除。

(2)改变设备描述表属性的途径

要改变设备描述表的属性,可通过以下途径:

用::SelectObject选入新的除调色板以外的GDI Object到设备描述表中;

对于调色板,使用::SelectPalette函数选入逻辑调色板,并使用::RealizePalette把逻辑调色板的入口映射到物理调色板中。

用其他API函数改变其他属性,如::SetMapMode改变映射模式。


[解决办法]
设备 上下文 句柄

Device Context Handle

一共3个概念,2个设计理念

句柄,一般是一个索引,通过它得到实际的struct

设备,就是普通设备,比如显示器,打印机

设备上下文,简单理解为一个struct,里面有颜色,画笔粗细,字体,等信息



决定你在这个设备上画出来的效果

句柄是一个封装常用的设计方法
把各种设备抽象为一个统一的设备也是一个常用的设计方法


[解决办法]
设备上下文(device context),其实简单的理解就是一个内存块,但句柄其实是一个二级指针,一个窗口对应一个DC,可以做一些绘图操作。

热点排行