繁体   English   中英

如何读取GetDeviceCaps()返回值?

[英]How to read GetDeviceCaps() return values?

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

根据文档功能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?

谢谢。

它们是位掩码。 在相关的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。

请参见“ C中的按位运算”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM