函数功能:
GetDeviceCaps 函数用于获得指定设备的一些特定信息。
API 函数原型:
注释:_In_ 说明该参数是输入的。
int GetDeviceCaps( _In_ HDC hdc, _In_ int nIndex );
参数解析:
|
参数 |
含义 |
|
hdc |
设备环境句柄 |
|
nIndex |
索引值,根据这个索引值该函数获得并返回相应信息的值 |
nIndex 的索引值可以是以下值:
|
索引值 |
含义 |
||||||||||||||||||||||||||||||||||
|
DRIVERVERSION |
设备驱动程序版本 |
||||||||||||||||||||||||||||||||||
|
TECHNOLOGY |
1. 设备技术,可以是下列任何一个值:
2. 如果 hdc 参数是增强型图元文件的设备环境句柄,则设备技术就是给 CreateEnhMetaFile 函数的引用设备,使用 GetObjectType 函数可以确定它是否增强型图元文件的设备环境。 |
||||||||||||||||||||||||||||||||||
|
HORZSIZE |
物理显示器的宽度(毫米) |
||||||||||||||||||||||||||||||||||
|
VERTSIZE |
物理显示器的高度(毫米) |
||||||||||||||||||||||||||||||||||
|
HORZRES |
物理显示器的宽度(像素) |
||||||||||||||||||||||||||||||||||
|
VERTRES |
物理显示器的高度(像素) |
||||||||||||||||||||||||||||||||||
|
LOGPIXELSX |
1. 沿显示器宽度每逻辑英寸的像素数 |
||||||||||||||||||||||||||||||||||
|
LOGPIXELSY |
1. 沿显示器高度每逻辑英寸的像素数 |
||||||||||||||||||||||||||||||||||
|
BITSPIXEL |
每个像素的色彩位数 |
||||||||||||||||||||||||||||||||||
|
PLANES |
色彩平面的数目 |
||||||||||||||||||||||||||||||||||
|
NUMBRUSHES |
设备指定的画刷数 |
||||||||||||||||||||||||||||||||||
|
NUMPENS |
设备指定的画笔数 |
||||||||||||||||||||||||||||||||||
|
NUMFONTS |
设备指定的字体数 |
||||||||||||||||||||||||||||||||||
|
NUMCOLORS |
1. 如果设备的色彩深度不超过 8位/像素点,返回设备的色彩数值 |
||||||||||||||||||||||||||||||||||
|
ASPECTX |
用于画线的设备像素的相对宽度 |
||||||||||||||||||||||||||||||||||
|
ASPECTY |
用于画线的设备像素的相对高度 |
||||||||||||||||||||||||||||||||||
|
ASPECTXY |
用于画线的设备像素的对角线宽度 |
||||||||||||||||||||||||||||||||||
|
PDEVICESIZE |
保留 |
||||||||||||||||||||||||||||||||||
|
CLIPCAPS |
1. 显示设备支持剪切性能的标志 |
||||||||||||||||||||||||||||||||||
|
SIZEPALETTE |
1. 系统调色板中的入口数目 |
||||||||||||||||||||||||||||||||||
|
NUMRESERVED |
1. 系统调色板中保留的入口数目 |
||||||||||||||||||||||||||||||||||
|
COLORRES |
1. 设备的实际颜色分辨率(位/像素) |
||||||||||||||||||||||||||||||||||
|
PHYSICALWIDTH |
对于打印设备:设备单位的物理页面的宽度。例如一个在 8.5 * 11 纸上设置为 600dpi 的打印机的设备物理单位宽度值为 5100,注意物理页面总是大于可打印的页面面积 |
||||||||||||||||||||||||||||||||||
|
PHYSICALHEIGHT |
对于打印设备:设备单位的物理页面的高度。例如一个在 8.5 * 11 纸上设置为 600dpi 的打印机的设备物理单位高度值为 6600,注意物理页面总是大于可打印的页面面积 |
||||||||||||||||||||||||||||||||||
|
PHYSICALOFFSETX |
对于打印设备:从物理页面左边到打印页面左边的距离。例如一个在 8.5 * 11 纸上设置为 600dpi 的打印机,不能在超出左边 0.25 英寸的地方打印,且有一个 150 设备单位的水平物理位移 |
||||||||||||||||||||||||||||||||||
|
PHYSICALOFFSETY |
对于打印设备:从物理页面上面到打印页面上边的距离。例如一个在 8.5 * 11 纸上设置为 600dpi 的打印机,不能在超出上边 0.5 英寸的地方打印,且有一个 300 设备单位的垂直物理位移 |
||||||||||||||||||||||||||||||||||
|
VREFRESH |
对于显示设备: |
||||||||||||||||||||||||||||||||||
|
SCALINGFACTORX |
打印机 x 轴的比例系数 |
||||||||||||||||||||||||||||||||||
|
SCALINGFACTORY |
打印机 y 轴的比例系数 |
||||||||||||||||||||||||||||||||||
|
BLTALIGNMENT |
1. 首选的水平绘图调整(表示为像素的倍数) |
||||||||||||||||||||||||||||||||||
|
SHADEBLENDCAPS |
该值用于指定显示设备的阴影和混合性能:
|
||||||||||||||||||||||||||||||||||
|
RASTERCAPS |
该值用于指定显示设备的光栅性能:
|
||||||||||||||||||||||||||||||||||
|
CURVECAPS |
该值用于指定显示设备绘制曲线的性能:
|
||||||||||||||||||||||||||||||||||
|
LINECAPS |
该值用于指定显示设备绘制线段的性能:
|
||||||||||||||||||||||||||||||||||
|
POLYGONALCAPS |
该值用于指定显示设备绘制多边形的性能:
|
||||||||||||||||||||||||||||||||||
|
TEXTCAPS |
该值用于指定显示设备绘制文本的性能:
|
||||||||||||||||||||||||||||||||||
|
COLORMGMTCAPS |
该值用于指定显示设备颜色管理的性能:
|
返回值:
1. 返回 nIndex 参数指定项的值;
2. 如果 nIndex 参数是 BITSPIXEL, 且设备是具有 15bpp 或 16bpp,返回值是 16。
备注:
1. 如果 nIndex 参数的值是 SHADEBLENDCAPS:
- 对于打印设备:GetDeviceCaps 函数返回任何打印机的报告
- 对于显示设备:所有混合操作都支持,除了 SB_NONE,唯一的返回值是 SB_CONST_ALPHA 和 SB_PIXEL_ALPHA,这表明这些操作是否被加速
2. 在多显示器系统中,如果 hdc 是台式机,GetDeviceCaps 函数返回主显示器的功能。如果你想为其他显示器的信息,则必须使用多显示器的 API 函数或调用 CreateDC 函数得到一个 hdc 指定显示器的设备环境。
注意,一般显示 1 是主显示器,但并非总是如此。
3. GetDeviceCaps 提供了以下六个索引值为打印设备转义符:
|
索引值 |
打印设备转义符 |
|
PHYSICALWIDTH |
GETPHYSPAGESIZE |
|
PHYSICALHEIGHT |
GETPHYSPAGESIZE |
|
PHYSICALOFFSETX |
GETPRINTINGOFFSET |
|
PHYSICALOFFSETY |
GETPHYSICALOFFSET |
|
SCALINGFACTORX |
GETSCALINGFACTOR |
|
SCALINGFACTORY |
GETSCALINGFACTOR |
4. 注意:
- GetDeviceCaps 函数获得的信息来源于显示驱动程序。
- 如果显示驱动程序拒绝提供任何信息,GetDeviceCaps 函数则通过计算固定数据得到信息。
- 如果显示驱动程序报告无效信息,GetDeviceCaps 函数返回无效信息。
- 此外,如果显示驱动拒绝报告信息,GetDeviceCaps 函数可能计算不正确的信息,因为它假设是固定的 DPI(每英寸点数 96)或固定的大小(取决于显示驱动程序是否提供)。
- 不幸的是,实现在 Windows 显示驱动程序模型(WDDM)(在 Windows Vista 中引入)的显示驱动程序导致 GDI 拿不到信息,所以 GetDeviceCaps 函数必须通过计算得到信息。




