【笨嘴拙舌WINDOWS】Dj,oh!nonono,It is about DC
“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:支持SetDIBits和GetDIBits函数。
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的更多相关文章
- 【笨嘴拙舌WINDOWS】BMP图片浏览器
要将文件显示成图片这其中需要经过 1.将磁盘文件内容读取到内存: 2.将文件对应内存里包含的像素为以及像素信息转化为显示驱动器能理解的格式: 3.将转化过后的内存送到显卡的缓存区 4.显示器读取缓存现 ...
- 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)
设备无关图在windows上面就是一个扩展名为.bmp的文件.我们知道每一种文件都是一个二进制流,只是这个二进制流的开头几个字节是规定了文件的格式..bmp的文件格式如下 “其中信息头是windows ...
- 【笨嘴拙舌WINDOWS】GDI对象之位图
GDI对象在windows中可以描述成为一次绘画操作时可使用的抽象工具.包括(画笔.画刷.字体.区域.调色板.位图等) GDI对象里的对象概念和在编程领域中面向对象编程的对象概念是不一样的! GDI对 ...
- 【笨嘴拙舌WINDOWS】SetCapture和ReleaseCapture
光电鼠标器是通过红外线或激光检测鼠标器的位移,将位移信号转换为电脉冲信号,再通过程序的处理和转换来控制屏幕上的光标箭头的移动的一种硬件设备. 换句话说,鼠标无时无刻不在监视着人类的活动,当人类用意识去 ...
- 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】
该程序能够监视Windows剪切板的内容(文字和图片) 其思路是 先调用SetClipBoardViewer(Self.Handle),让Windows剪切板内容发生改变之后,通知本程序: 然后截获W ...
- 【笨嘴拙舌WINDOWS】剪切板
Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制.Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局 ...
- 【笨嘴拙舌WINDOWS】计时器精度
WINDOWS的大多数系统并非实时操作系统,所以不能规定计算机在某个精确到纳秒的时间让计算机做某项任务,如果规定了时间WINDOWS也将需要在完成了线程调度后,经行任务执行! 也就是说,如果你的应用程 ...
- 【笨嘴拙舌WINDOWS】实践检验之按键精灵【Delphi】
通过记录键盘和鼠标位置和输入信息,然后模拟发送,就能够创建一个按键精灵! 主要代码如下: library KeyBoardHook; { Important note about DLL memory ...
- 【笨嘴拙舌WINDOWS】键盘消息,鼠标消息
键盘消息 Windows系统无论何时只有一个窗口(可能是子窗口,也就是控件)能获得焦点. 焦点窗口通过windows消息来响应人的键盘操作,与键盘相关的常用消息罗列如下: WM_KEYDOWN 按 ...
随机推荐
- 批量安装操作系统之cobbler
Cobbler 部署文档 服务端配置 操作系统:Centos6.4 关闭防火墙及 selinux 安装cobbler软件 添加yum源 rpm -Uvh https://dl.fedoraprojec ...
- Asp.net与Flex交互测试记录
一.利用asp.net为Flex提供数据服务,flex为前端表现. 二.flex通过三种方式四种代码实现来取数据.分别为 HttpService. WebService. RemoteObje ...
- HDU 2669 Romantic(扩展欧几里德, 数学题)
题目 //第一眼看题目觉得好熟悉,但是还是没想起来//洪湖来写不出来去看了解题报告,发现是裸的 扩展欧几里得 - - /* //扩展欧几里得算法(求 ax+by=gcd )//返回d=gcd(a,b) ...
- HDU 2126 Buy the souvenirs (01背包,输出方案数)
题意:给出t组数据 每组数据给出n和m,n代表商品个数,m代表你所拥有的钱,然后给出n个商品的价值 问你所能买到的最大件数,和对应的方案数.思路: 如果将物品的价格看做容量,将它的件数1看做价值的话, ...
- SqlBulkCopy大批量数据插入到sql表中
alter TYPE TableType AS TABLE ( Name VARCHAR() , code VARCHAR() ) GO alter PROCEDURE usp_InsertProdu ...
- 【poj3358】消因子+BSGS 或 消因子+欧拉定理 两种方法
题意:给你一个分数,求它在二进制下的循环节的长度,还有第一个循环节从哪一位开始. For example, x = 1/10 = 0.0001100110011(00110011)w and 0001 ...
- ssh超时断开的解决方法
当用SSH Secure Shell连接Linux时,如果几分钟没有任何操作,连接就会断开,必须重新登陆才行,每次都重复相同的操作,很是烦人,本文总结了两种解决的方法. 方法1:更改ssh服务器的配置 ...
- 4 tips for staying productive on Friday
4 tips for staying productive on Friday如何让你的周五和周一一样有效率1.Schedule Your Day with Tasks 用任务计划一天 Sometim ...
- iOS开发--项目内存优化
在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化.自己比较常用的内存优化方法有两种 1.Analyze,静态分析内存泄露的方法.很简单,在Xcode菜单栏中点 ...
- TestDirector安装配置
一.介绍 TestDirector是全球最大的软件测试工具提供商,公司生产企业级测试管理工具,也是业界第一个基于Web的测试管理系统,它可以在公司内部或外部进行全球范围内测试的管理.通过在一个整体的应 ...
