Windows Mobile GetDeviceCaps始终返回零

时间:2009-08-10 20:11:50

标签: windows-mobile

调用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 个答案:

答案 0 :(得分:1)

试试这个:

int horzRes = GetSystemMetrics(SM_CXSCREEN);

int vertRes = GetSystemMetrics(SM_CYSCREEN);

答案 1 :(得分:1)

肯定有先决条件......

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. 取消选中外部文件复选框。 (无论那意味着什么)
  8. 启用高分辨率感知应用程序开发。

    我无法以这种方式创建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设备和模拟器上的所有返回(高分辨率)值。