Как прочитать GetDeviceCaps () возвращаемые значения? - PullRequest
0 голосов
/ 19 ноября 2018

Я новичок в Windows API и просто не могу понять:

Согласно документации функция int GetDeviceCaps(HDC hdc,int index); возвращает целочисленные значения, соответствующие выбранному элементу, о котором я хочу знать. Тем не менее, как я должен преобразовать целые числа в значения?

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

вещь РАСТЕРКАПС:

значения

  • RC_BANDING Требуется поддержка полос.
  • RC_BITBLT Возможность передачи растровых изображений.
  • RC_BITMAP64 Поддерживает растровые изображения размером более 64 КБ.
  • RC_DI_BITMAP Способен поддерживать SetDIBits и GetDIBits. функции.
  • RC_DIBTODEV Способен поддерживать SetDIBitsToDevice функция.
  • RC_FLOODFILL Способен выполнять заливку.

...

Означает ли 32409, что устройство имеет значения (возможности) RASTERCAP 3,2,4,0 и 9 в порядке, указанном в их таблице?

Спасибо.

1 Ответ

0 голосов
/ 19 ноября 2018

Они битовые маски. В соответствующем заголовочном файле 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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...