“DC: Device content 设备描述表。通常指显示器,或者打印机设备的描述”

如果你不是从事打印机方面的编程,那么就可以将DC简单的理解为显示器的属性表。WINDOWS将内存里面的东西通过显示器展现出来,使用了显示器的绘制(在显示器中间画一条黑色水平1个像素宽的直线)属性,这些属性被WINDOWS装入了一个叫做DC的结构里面!应用程序通过使用DC来绘制自己的窗体。

如何获得DC


1.在处理WM_PAINT消息的时候使用

PAINTSTRUCT ps ;

hdc = BeginPaint (hwnd, &ps) ;

EndPaint (hwnd, &ps) ;

“只能绘制无效区域”

2.

hdc= GetDc(hwnd)

ReleaseDc(hwnd,hdc);

“只能绘制客户区”

3.

hdc = GetWindowDC(hwnd)

ReleaseDc(hwnd,hdc);

“能绘制窗体内任何位置”

4.

hdc=CreateDC(TEXT(“DISPLAY”),NULL,NULL,NULL)

DeleteDC(hdc);

“获取屏幕设备”

hdc=CreateDC(TEXT(“WINSPOOL”),NULL,NULL,NULL)

DeleteDC(hdc);

“获取打印机设备”

5.当使用位图时

hdcMem=CreateCompatibleD(hdc Of Screen or Printer)

DeleteDc(hdcMem)

“创建一个与屏幕兼容的内存设备描述表:绘画从直接屏幕转移到内存,快速进行多种GDI处理,然后一次性输出到屏幕”

获取DC的属性


Value=GetDeviceCaps(hdc,Index)

常用Index取值

“”

完整Index的取值与意义列表如下

DRIVERVERSION:设备驱动程序版本。

TECHNOLOGY:设备技术,它可以是下列一值:

DT_PLOTTER:矢量绘图仪;DT_RASDISPLAY:光栅显示器;

DT_RASPRINTER:光栅打印机;DT_RASCAMERA:光栅照相机;

DT_CHARSTREAM:字符流;DT_METAFILE:图元文件

DT_DISPFILE:显示器文件。

如果hdc参数指定图元文件设备上下文环境,则设备技术就是给CreateEnhMetaFile函数的引用设备,使用GetObjectType函数可以确定它是否是一增强元文件设备上下文环境。

HORZSIZE:物理屏幕的宽度(毫米);VERTSIZE:物理屏幕的高度(毫米);HORZRES:屏幕的宽度(像素);

VERTRES:屏幕的高度(光栅线);

LOGPIXELSX:沿屏幕宽度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同;

LOGPIXELSY:沿屏幕高度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同;

BITSPIXEL:像素相连颜色位数;PLANES:颜色位面数;NUMBRUSHES:设备指定画刷数;

NUMPENS:设备指定笔数;NUMFONTS:设备指定字体数;

NUMCOLORS:设备颜色表的入口数,如果设备的色深不超过8位像素。对于超过色深的设备返回-1;

ASPECTX:用于画线的设备像素的相对宽度;ASPECTY:用于画线的设备像素的相对高度;

ASPECTXY:用于画线的设备像素的对角线宽度;PDEVLCESIZE:保留;

CLIDCAPS:显示设备支持剪切性能的标志。如果设备可剪切为一个长方形,则为1,否则为0;

SIZEPALETTE:系统调色板中的入口数目,只有在设备驱动器在RASTERCAPS索引中设置RC PALETFE位时该索引值才是有效的。且该索引值只能用于16位Windows的驱动器;

NUMRESERVED:系统调色板中保留的入口数目,只有在设备驱动器在RASTERLAP索引中设置RC PALETFE位时,该索引值才是有效的且该索引值只有能于16位的Windows驱动器;

COLORRES:实际位像的实际设备颜色,只有设备驱动器在RASTERLAP索引中设置RCPALETFE位时,该索引值才是有效的且该索引值只能用于16位的Windows驱动器;

PHYSICALWIDTH:对于打印设备,为以设备单位的物理页面宽度。例如一个在8.5*11纸上设置为600dpi的打印机的设备物理单位宽度值为5100,注意物理页面总是大于可打印的页面面积,且从不小于;

PHPSICALHEIGHT:为以设备单位的物理页面宽度。例如一个在8.5*11纸上设置为600dpi的打印机的设备物理单位高度值为6600;

PHYSICALOFFSETX:对于打印设备,从物理页面左边到打印页面左边的距离,例如,一个在8.5*11纸上设置为600dpi的打印机,不能在超出左边0.25处打印,且有一个150备单位的水平物理位移;

PHYSICALOFFSETY;对于打印设备。从物理页面上面到打印页面上边的距离。例如一个在8.5*11打印纸上设置为的打印机,不能在超出上边的地方打处,且有一个设备单位的物理位移;

VREFRESH:Windows NT:对于显示设备。设备的当前垂直刷新率以每秒中的循环次数为单位0或1刷新率代表显示硬件的缺省刷新率,此缺省刷新率通常通过设置显卡或主板的跳线来改变,或通过一个不使用Win32显示函数比如ChangeDisplay Setting的一个配置程序来设置;

DESKTOPHORZRES:Windows NT:可视桌面的以像素为单位的宽度。如果设备支持一个可视桌面或双重显示则此值可能大于VERTRES;

SCALINGFACTORX:打印机x轴的比例系数;SCALINGFACTORY:打印机y轴的比例系数。

BLTALIGNMENT:在Windows NT中作为像素倍数的水平绘图调整,对于最好的绘图操作,窗口绘图应该是水平调整到此值的倍数。0显示设备为加速的,且可用任何调整。

SHADEBLENDCAPS:在Windows 98、Windows NT 5.0和以后版本中此值显示设备的阴影和混合特性。

SB_CONST_ALPHA:处理BLENDFUNCTION结构中的Source constantAlpha元素,并通过AlphaBlend数中的blendFunction参数来指定;

SB_GRAD_RECT:进行Gradientfill矩形填充的能力。SB_GRAD_TRI;进行Gradientfill三角形填充的能力;

SB_NONE:设备不支持这些特性中的任何一个。SB_PIXEL_ALPHA:处理AlphaBlond中每一个像素Alphx;

SB_PREMULT_ALPHA:在Alphablend中对alpha进行预乘;

RASTERCAPS:设备所支持的光栅性能,可以是下列值的某种组合;

RC_BANDING:需要联合支持。RC_BITBLT:支持传送位图

RC_BITMAP64:支持大于64K的位图。RC_DI_BITMAP:支持SetDIBitsGetDIBits函数。

RC_DIBTODEV:支持SetDIBits To Device函数;RC_FLOODFILL:支持连续填充

RC_GDI20_OUTPUT:支持16位Windows 2.0特征;RC_PALETTE:指定一个基于调色板的设备。

RC_SCALING:支持缩放;RC_STRETCHBLT:支持StretchBlt函数。

RC_STRETCHDIB:stretchDIBits函数。

CURVECAPS:显示设备所支持的曲线性能,可以是下列值的某种组合。

CC_NONE:不支持绘制曲线;CC_CHORD:支持绘制弦;CC_CIRCLES:支持绘制圆。

CC_ELLIPSES:支持绘制椭圆;CC_INTERIORS:支持内部填充;CC_PIE:支持绘制扇形图。

CC_ROUNDRECT:支持绘制圆角矩形;CC_STYLED:支持绘制带风格的边界。

CC_WIDE:支持绘制宽的边界;CC_WIDESTYLED:支持绘制宽的、带风格的边界。

LINECAPS设备所支持的画线性能,可以是下列值的某种组合:

LC_NONE:不支持绘制线段;LC_INTERIORS:支持内部填充;LC_MARKER:支持绘制标记符。

LC_POLYLINE:支持折线;LC_POLYMARKER:支持多种标记符;LC_STYLED:带风格的线段。

LC_WIDE:支持画宽线;LC_WIDESTYLED:支持宽的带风格的线段。

POLYGONALCAPS设有所支持的多边形性能。可以是下列值的某种组合。

PC_NONE:不支持绘制多边形;PC_INTERIORS:支持内部填充;PC_POLYGON:支持绘制间隔式填充多边形。

PC_RECTANGLE:支持绘制矩形;PC_SCANLINE:支持绘制扫描线;PC_STYLED:支持绘制带风格的边界。

PC_WIDE:支持绘制宽边界;PC_WIDESTYLED:支持绘制宽的带风格的边界。

PC_WINDPOLYGON:支持绘制折线式填充多边形。

TEXTCAPS设备所支持的文字性能,可以是下列值的某种组合:

TC_OP_CHARACTER:支持字符输出精度;TC_OP_STROKE:支持笔画输出精度。

TC_CP_STROKE:支持笔画剪切精度;TC_CR_90:支持字符作90度旋转;

TC_CR_ANY:支持字符作任意角度旋转;TC_SF_X_YINDEP:支持x和y方向的独立缩放。

TC_SA_DOUBLE:支持把字符放大一倍;TC_SA_INTEGER:支持整数倍缩放。

TC_SA_CONTIN:支持以任何倍数的严格缩放;TC_EA_DOUBLE:支持字符加重。

TC_IA_ABLE:支持斜字体;TC_UA_ABLE:支持下划线;TC_SO_ABLE:支持删除线。

TC_RA_ABLE:支持光栅字体;TC_VA_ABLE:支持矢量字体;TC_RESERVED:保留、必须为零。

TC_SCROLLBLT:不支持用位快传递来滚动,注意这可能事与愿违。

获取、设置DC


DC的属性通常存在于某种状态,一旦更改了准备设备不会自动复原(除非重启),可以通过以下这些API来更改其某种属性

{

属性

默认值

相关函数

}

背景色

WHITE

GetBkColor

SetBkColor

背景模式

OPAQUE

GetBkMode

SetBkMode

位图

NONE

CreateBitMap

CreateBitMapIndirect

CreateCompatibleBitmap

SelectObject

画刷

WHITE_BRUSH

CreateBrushIndirect

CreateDIBPatternBrush

CreateHatchBrush

CreatePatternBrush

CreateSolidBrush

SelectObject

画刷起始位置

(0,0)

GetBrushOrg

SetBrushOrg

UnrealizeObject

剪裁域

DISPLAY SURFACE

ExcludeClipRect

IntersetClipRect

OffsetClipRgn

SelectClipPath

SelectObject

SelectClipRgn

颜色调色板

DEFAULT_PALETTE

CreatePalette

RealizePatte

SelectPalette

绘图方式

R2_COPYPEN

GetROP2

SetROP2

字体

SYSTEM_FONT

CreateFont

CreateFontIndirect

SelectObject

字符间距

0

GetTextCharacterExtra

SetTextCharacterExtra

映射方式

MM_TEXT

GetMapMode

SetMapMode

画笔

BLACK_PEN

CreatePen

CreatePenIndirect

SelectObject

多边形填充方式

ALTERNATE

GetPolyFillMode

SetPolyFileMode

缩放模式

BLACKONWHITE

SetStretchBltMode

GetStretchBltMode

文本颜色

BLACK

GetTextColor

SetTextColor

视图范围

(1,1)

GetViewportExtEx

SetViewportExtEx

ScaleViewportExtEx

视图原点

(0,0)

GetViewportOrgEx

SetViewportOrgEx

窗口范围

(1,1)

GetWindowExtEx

SetWindowExtEx

ScaleWindowExtEx

窗口原点

(0,0)

GetWindowOrgEx

OffsetWindowOrgEx

SetWindowOrgEx

保存DC


DC的使用可以像栈一样PUSH和POP

idSaved=SaveDc(Hdc)

RestoreDcr(Hdc,idSaved) //或者RestoreDC(hdc,-1)

【笨嘴拙舌WINDOWS】Dj,oh!nonono,It is about DC的更多相关文章

  1. 【笨嘴拙舌WINDOWS】BMP图片浏览器

    要将文件显示成图片这其中需要经过 1.将磁盘文件内容读取到内存: 2.将文件对应内存里包含的像素为以及像素信息转化为显示驱动器能理解的格式: 3.将转化过后的内存送到显卡的缓存区 4.显示器读取缓存现 ...

  2. 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)

    设备无关图在windows上面就是一个扩展名为.bmp的文件.我们知道每一种文件都是一个二进制流,只是这个二进制流的开头几个字节是规定了文件的格式..bmp的文件格式如下 “其中信息头是windows ...

  3. 【笨嘴拙舌WINDOWS】GDI对象之位图

    GDI对象在windows中可以描述成为一次绘画操作时可使用的抽象工具.包括(画笔.画刷.字体.区域.调色板.位图等) GDI对象里的对象概念和在编程领域中面向对象编程的对象概念是不一样的! GDI对 ...

  4. 【笨嘴拙舌WINDOWS】SetCapture和ReleaseCapture

    光电鼠标器是通过红外线或激光检测鼠标器的位移,将位移信号转换为电脉冲信号,再通过程序的处理和转换来控制屏幕上的光标箭头的移动的一种硬件设备. 换句话说,鼠标无时无刻不在监视着人类的活动,当人类用意识去 ...

  5. 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】

    该程序能够监视Windows剪切板的内容(文字和图片) 其思路是 先调用SetClipBoardViewer(Self.Handle),让Windows剪切板内容发生改变之后,通知本程序: 然后截获W ...

  6. 【笨嘴拙舌WINDOWS】剪切板

    Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制.Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局 ...

  7. 【笨嘴拙舌WINDOWS】计时器精度

    WINDOWS的大多数系统并非实时操作系统,所以不能规定计算机在某个精确到纳秒的时间让计算机做某项任务,如果规定了时间WINDOWS也将需要在完成了线程调度后,经行任务执行! 也就是说,如果你的应用程 ...

  8. 【笨嘴拙舌WINDOWS】实践检验之按键精灵【Delphi】

    通过记录键盘和鼠标位置和输入信息,然后模拟发送,就能够创建一个按键精灵! 主要代码如下: library KeyBoardHook; { Important note about DLL memory ...

  9. 【笨嘴拙舌WINDOWS】键盘消息,鼠标消息

    键盘消息 Windows系统无论何时只有一个窗口(可能是子窗口,也就是控件)能获得焦点. 焦点窗口通过windows消息来响应人的键盘操作,与键盘相关的常用消息罗列如下: WM_KEYDOWN   按 ...

随机推荐

  1. Lua require搜索路径指定方法

    在自己的lua文件中,如果使用到了自己写的C库或者第三方库,想让lua编译到自己指定的目录下寻找*.lua或*.so文件的时候,可以再自己的Lua代码中添加如下代码,可以指定require搜索的路径. ...

  2. 用vs2010 编写C语言程序,VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    编译mongodb-src-r2.2.2出现以下问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏   这个是由于日志文件引起的,可以将 项目\ ...

  3. 高达渐出现效果Shader

    原地址: http://liweizhaolili.blog.163.com/blog/static/1623074420140591864/ 最近在玩游戏<高达破坏者>,里面的高达出现的 ...

  4. Sqli-labs less 40

    Less-40 本关的sql语句为SELECT * FROM users WHERE id=('$id') LIMIT 0,1 我们根据sql语句构造以下的payload: http://127.0. ...

  5. PHP SESSION 保存到数据库

    PHP SESSION 的工作原理 在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ...

  6. http协议本身能获取客户端Mac地址问题

    http 位于网络应用程 应用层 会话层 表示层 传输层 网络层 数据链路层 物理层 数据在最高层开始传输 没经历下面一层加一层的头,然后传入目的电脑再进行一层层的解刨,所以http本来没有mac而接 ...

  7. 计算机学院2014年“新生杯”ACM程序设计大赛

    1440: 棋盘摆车问题 对于输入n,k: 1.当n<k时,无满足的摆法 2.否则 第一个车可以排n*n个位置(即整个棋盘),第二个可排(n-1)*(n-1)个位置,…… 正如排列组合一样,车与 ...

  8. 客户端用httpurlconnection来进行http连接的

    客户端用httpurlconnection来进行http连接的,并设置restful风格 请求响应流程 设置连接参数的方法 setAllowUserInteraction setDoInput set ...

  9. MyEclipse快捷键记录

    MyEclipse快捷键 ------------------------------------- MyEclipse 快捷键1(CTRL) ---------------------------- ...

  10. 通过GeoIP2分析访问者IP获取地理位置信息

    原文链接:http://blog.csdn.net/johnnycode/article/details/42028841 MaxMind GeoIP2 服务能识别互联网用户的地点位置与其他特征,应用 ...