Windows Mobile GetDeviceCaps всегда возвращает ноль - PullRequest
0 голосов
/ 11 августа 2009

Есть ли предварительное условие для вызова GetDeviceCaps? Я пытаюсь выяснить (во время выполнения), является ли собственное разрешение экрана для устройства Windows Mobile QGVA или VGA. Следующие возвращаемые значения равны нулю в OnInitDialog ():

CDC* dc = GetDC();
int horzRes = GetDeviceCaps( HDC(dc), HORZRES );
int vertRes = GetDeviceCaps( HDC(dc), VERTRES );
int xLogPixels = GetDeviceCaps( HDC(dc), LOGPIXELSX );
int yLogPixels = GetDeviceCaps( HDC(dc), LOGPIXELSY );

Ответы [ 2 ]

1 голос
/ 12 августа 2009

Определенно есть предпосылки ...

http://msdn.microsoft.com/en-us/library/ms838191.aspx говорит:

  1. В меню «Вставка» выберите «Ресурс».
  2. Нажмите кнопку «Пользовательский».
  3. Введите CEUX для типа ресурса.
  4. Установить данные ресурса на 01 00.
  5. Перейдите на вкладку «Свойства».
  6. Переименуйте элемент в «HI_RES_AWARE», включая кавычки. (Если кавычки опущены, HI_RES_AWARE будет неправильно определен как числовое значение в resource.h, и вам нужно будет вернуться назад и удалить строку из resource.h.)
  7. Снимите флажок с внешнего файла. (что бы это ни значило)

для включения разработки приложений с высоким разрешением.

Я не смог создать ресурс CEUX таким образом, но у меня все получилось после того, как я просто добавил его непосредственно в файл ресурса, например ::

HI_RES_AWARE CEUX {1}       // To turn off the emulation layer

В коде приложения также должно быть введение:

AfxEnableDRA( true );

Даже после этого все приведенные выше значения GetDeviceCaps были по-прежнему равны нулю, но

int widthX = GetSystemMetrics( SM_CXFULLSCREEN );
int heightY = GetSystemMetrics( SM_CYFULLSCREEN );
int captionHeight = GetSystemMetrics( SM_CYCAPTION );
int menuHeight = GetSystemMetrics( SM_CYMENU );
int dialogFrameWidth = GetSystemMetrics( SM_CXDLGFRAME );
int dialogFrameHeight = GetSystemMetrics( SM_CYDLGFRAME );

все возвращенные значения (высокое разрешение) на устройствах VGA с разрешением PPC03se и WM5 и эмуляторах.

1 голос
/ 11 августа 2009

Попробуйте это:

int horzRes = GetSystemMetrics (SM_CXSCREEN);

int vertRes = GetSystemMetrics (SM_CYSCREEN);

...