如何获取display device 的相关信息,例如分辨率。(EnumDisplaySettings)

来源:互联网 发布:教育软件行业分析 编辑:程序博客网 时间:2024/05/26 19:18

      我在修改dst rectangle 的大小时,需要用到当前display device的 width 和Height,即分辨率。如果直接从driver里获取就会涉及到很多函数和变量,比较麻烦。

最后使用EnumDisplaySettings()解决了问题。

      现将此函数的用法和例子整理出来:

函数原型:

      BOOL EnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, LPDEVMODE lpDevMode);

参数:

lpszDeviceName:指向一个以null的结尾的字符串,该字符串指定了显示设备。此函数将获得该显示设备的图形模式信息。该参数可以为NULL。NULL值表明调用线程正运行在计算机的当前显示设备上。如果lpszDeviceName为NULL,该字符串的形式为\\.\displayx,其中x的值可以为1、2或3。对于Windows 95和Windows 98,lpszDeviceName必须为NULL。

  iModeNum:表明要检索的信息类型,该值可以是一个图形模式索引,也可以是下列一值:
  ENUM_CURRENT_SETTINGS:检索显示设备的当前设置。
  ENUM_REGISTRY_SETTINGS:检索当前存储在注册表中的显示设备的设置。
  图形模式索引值从零开始,要得到一个显示设备的所有图形模式信息,可以一系列地调用EnumDisplaySettings函数,并且iModeNum显为一个非零值时,则函数返回的信息是最近一次使用iModeNum置为零调用该函数时存储的信息。
  lpDevMode:DEVMODE结构的指针,该结构存储指定图形模式的信息,在调用EnumDisplaySettings之前,设置dmSize为sizeof(DEVMODE),并且以字节为单位,设置dmDriveExtra元素为接收专用驱动数据可用的附加空间。
  EnumDisplaySettings函数设置如下五个DEVMODE元素的值:dmBitsPerpel、dmPelsWidth、dmPelsHeight、dmDisplayFlagsdmDisplayFrequency
  返回值:如果成功,返回非零值;如果失败,返回零。




The DEVMODE data structure contains information about the initialization and environment of a printer or a display device.

typedef struct _devicemode {  TCHAR dmDeviceName[CCHDEVICENAME];  WORD  dmSpecVersion;  WORD  dmDriverVersion;  WORD  dmSize;  WORD  dmDriverExtra;  DWORD dmFields;  union {    struct {      short dmOrientation;      short dmPaperSize;      short dmPaperLength;      short dmPaperWidth;      short dmScale;      short dmCopies;      short dmDefaultSource;      short dmPrintQuality;    };    struct {      POINTL dmPosition;      DWORD  dmDisplayOrientation;      DWORD  dmDisplayFixedOutput;    };  };  short dmColor;  short dmDuplex;  short dmYResolution;  short dmTTOption;  short dmCollate;  TCHAR dmFormName[CCHFORMNAME];  WORD  dmLogPixels;  DWORD dmBitsPerPel;//颜色分辨率,in bits per pixel, of the display device (for example: 4 bits for 16 colors, 8 bits for 256 colors, or 16 bits for 65,536 colors). Display drivers use this member, for example, in the ChangeDisplaySettingsfunction. Printer drivers do not use this member.  DWORD dmPelsWidth;.//显示设备surface的宽度,单位pixel  DWORD dmPelsHeight;//
//显示设备surface的高度,单位pixel
  union {    DWORD dmDisplayFlags;    DWORD dmNup;  };  DWORD dmDisplayFrequency;#if (WINVER >= 0x0400)  DWORD dmICMMethod;  DWORD dmICMIntent;  DWORD dmMediaType;  DWORD dmDitherType;  DWORD dmReserved1;  DWORD dmReserved2;#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)  DWORD dmPanningWidth;  DWORD dmPanningHeight;#endif #endif } DEVMODE, *PDEVMODE, *LPDEVMODE;
使用举例:
                DEVMODE devmode;BOOL  Isgetdisplay=0;        memset(&devmode,0,sizeof (devmode));devmode.dmSize  = sizeof(DEVMODE);devmode.dmDriverExtra = 0;Isgetdisplay=EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode); if(!Isgetdisplay){             assert(0);}
                                        maxWidth=devmode.dmPelsWidth;
                                maxHeight=devmode.dmPelsHeight;


原创粉丝点击