如何读取GetDeviceCaps()返回值?

时间:2018-11-19 14:34:06

标签: windows

我是Windows API的新手,但我似乎无法弄清楚:

根据documentation,函数int GetDeviceCaps(HDC hdc,int index);返回整数值,该值对应于我要了解的所选项目。但是,我应该如何将整数转换为值?

printf("Rastercaps: %d\n", GetDeviceCaps(hdc, RASTERCAPS));
// rastercaps: 32409

项目RASTERCAPS:

  • RC_BANDING需要波段支持。
  • RC_BITBLT能够传输位图。
  • RC_BITMAP64能够支持大于64 KB的位图。
  • RC_DI_BITMAP能够支持SetDIBits和GetDIBits 功能。
  • RC_DIBTODEV能支持SetDIBitsToDevice 功能。
  • RC_FLOODFILL能够执行洪水填充。

...

32409表示设备具有表中规定的RASTERCAP值(功能)3、2、4、0和9?

谢谢。

1 个答案:

答案 0 :(得分:0)

它们是位掩码。在相关的C头文件(wingdi.h)中,

/* Raster Capabilities */
#define RC_NONE
#define RC_BITBLT           1       /* Can do standard BLT.             */
#define RC_BANDING          2       /* Device requires banding support  */
#define RC_SCALING          4       /* Device requires scaling support  */
#define RC_BITMAP64         8       /* Device can support >64K bitmap   */

...还有更多

返回值(32409)由按位或这些值组成。因此,例如,如果您想知道设备是否可以支持> 64K位图,则可以这样做

int rc = GetDeviceCaps(hdc, RASTERCAPS);
if (rc & RC_BITMAP64) { /* it does support >64k */ }

因此,在这种情况下,32409是二进制的0111111010011001,这意味着它具有RC_BITBLT | RC_BITMAP64 | RC_GDI20_OUTPUT | RC_DI_BITMAP | RC_DIBTODEV | RC_BIGFONT | RC_STRETCHBLT | RC_FLOODFILL | RC_STRETCHDIB | RC_OP_DX_OUTPUT。

请参见"Bitwise operations in C"