您的位置:首页 > 其它

Windows客户端开发--获取屏幕分辨率及大小相关

2016-10-25 20:52 465 查看
今天介绍一下,windows客户端开发中,屏幕分辨率,以及屏幕客户区大小的获得方法。

GetSystemMetrics

函数功能:用于得到被定义的系统数据或者系统配置信息

函数原型:

int WINAPIGetSystemMetrics(int nIndex);


nIndex可取值:

#define SM_CXSCREEN             0

#define SM_CYSCREEN             1

#define SM_CXVSCROLL            2

#define SM_CYHSCROLL            3

#define SM_CYCAPTION            4

#define SM_CXBORDER             5

#define SM_CYBORDER             6

#define SM_CXDLGFRAME           7

#define SM_CYDLGFRAME           8

#define SM_CYVTHUMB             9

#define SM_CXHTHUMB             10

#define SM_CXICON               11

#define SM_CYICON               12

#define SM_CXCURSOR             13

#define SM_CYCURSOR             14

#define SM_CYMENU               15

#define SM_CXFULLSCREEN         16

#define SM_CYFULLSCREEN         17

#define SM_CYKANJIWINDOW        18

#define SM_MOUSEPRESENT         19

#define SM_CYVSCROLL            20

#define SM_CXHSCROLL            21

#define SM_DEBUG                22

#define SM_SWAPBUTTON           23

#define SM_RESERVED1            24

#define SM_RESERVED2            25

#define SM_RESERVED3            26

#define SM_RESERVED4            27

#define SM_CXMIN                28

#define SM_CYMIN                29

#define SM_CXSIZE               30

#define SM_CYSIZE               31

#define SM_CXFRAME              32

#define SM_CYFRAME              33

#define SM_CXMINTRACK           34

#define SM_CYMINTRACK           35

#define SM_CXDOUBLECLK          36

#define SM_CYDOUBLECLK          37

#define SM_CXICONSPACING        38

#define SM_CYICONSPACING        39

#define SM_MENUDROPALIGNMENT    40

#define SM_PENWINDOWS           41

#define SM_DBCSENABLED          42

#define SM_CMOUSEBUTTONS        43

#if(WINVER >= 0x0400)

#define SM_CXFIXEDFRAME           SM_CXDLGFRAME  /* ;win40 name change */

#define SM_CYFIXEDFRAME           SM_CYDLGFRAME  /* ;win40 name change */

#define SM_CXSIZEFRAME            SM_CXFRAME     /* ;win40 name change */

#define SM_CYSIZEFRAME            SM_CYFRAME     /* ;win40 name change */

#define SM_SECURE               44

#define SM_CXEDGE               45

#define SM_CYEDGE               46

#define SM_CXMINSPACING         47

#define SM_CYMINSPACING         48

#define SM_CXSMICON             49

#define SM_CYSMICON             50

#define SM_CYSMCAPTION          51

#define SM_CXSMSIZE             52

#define SM_CYSMSIZE             53

#define SM_CXMENUSIZE           54

#define SM_CYMENUSIZE           55

#define SM_ARRANGE              56

#define SM_CXMINIMIZED          57

#define SM_CYMINIMIZED          58

#define SM_CXMAXTRACK           59

#define SM_CYMAXTRACK           60

#define SM_CXMAXIMIZED          61

#define SM_CYMAXIMIZED          62

#define SM_NETWORK              63

#define SM_CLEANBOOT            67

#define SM_CXDRAG               68

#define SM_CYDRAG               69

#endif /* WINVER >= 0x0400 */

#define SM_SHOWSOUNDS           70

#if(WINVER >= 0x0400)

#define SM_CXMENUCHECK          71   /* Use instead of GetMenuCheckMarkDimensions()! */

#define SM_CYMENUCHECK          72

#define SM_SLOWMACHINE          73

#define SM_MIDEASTENABLED       74

#endif /* WINVER >= 0x0400 */

#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)

#define SM_MOUSEWHEELPRESENT    75

#endif

#if(WINVER >= 0x0500)

#define SM_XVIRTUALSCREEN       76

#define SM_YVIRTUALSCREEN       77

#define SM_CXVIRTUALSCREEN      78

#define SM_CYVIRTUALSCREEN      79

#define SM_CMONITORS            80

#define SM_SAMEDISPLAYFORMAT    81

#endif /* WINVER >= 0x0500 */

#if (WINVER < 0x0500) && (!defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0400))

#define SM_CMETRICS             76

#else

#define SM_CMETRICS             83

#endif


GetDeviceCaps

函数功能:获取指定设备的性能参数该方法将所取得的硬件设备信息保存到一个D3DCAPS9结构中。

函数原型:

int GetDeviceCaps(HDC hdc, int nlndex);


EnumDisplaySettings

EnumDisplaySettings函数得到显示设备的一个图形模式设备,通过对该函数一系列的调用可以得到显示设备所有的图形模式信息。

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


SystemParametersinfo

该函数查询或设置系统级参数。该函数也可以在设置参数中更新用户配置文件。

BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni);


应用:

#include <stdio.h>
#include <windows.h>
#include <iostream>
int main()
{

int nScreenWidth, nScreenHeight;
nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
printf("屏幕大小(像素) 宽:%d 高:%d\n", nScreenWidth, nScreenHeight);

//HWND pTaskWnd = FindWindow(L"Shell_TrayWnd", NULL);

//ShowWindow(pTaskWnd, true);
//LONG lStyle = GetWindowLong(pTaskWnd, GWL_STYLE);
//if (lStyle & WS_VISIBLE)
//{
//  //可见
//}
//else
//{
//  //隐藏
//}
HDC hdcScreen = GetDC(NULL);
int cx = GetDeviceCaps(hdcScreen, HORZRES);
int cy = GetDeviceCaps(hdcScreen, VERTRES);
DeleteObject(hdcScreen);
printf("屏幕大小 宽:%d 高:%d\n", cx, cy);

RECT rc;
SystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID)&rc, 0);
printf("客户区大小(像素) 宽:%d 高:%d\n", rc.right - rc.left, rc.bottom - rc.top);

int nClientWidth, nClientHeight;
nClientWidth = GetSystemMetrics(SM_CXFULLSCREEN);
nClientHeight = GetSystemMetrics(SM_CYFULLSCREEN);
printf("客户区大小(像素) 宽:%d 高:%d\n", nClientWidth, nClientHeight);

int nMaximizedWidth, nMaximizedHeight;
nMaximizedWidth = GetSystemMetrics(SM_CXMAXIMIZED);
nMaximizedHeight = GetSystemMetrics(SM_CYMAXIMIZED);
printf("最大化窗口的默认尺寸(像素) 宽:%d 高:%d\n", nMaximizedWidth, nMaximizedHeight);

DEVMODE dm;
dm.dmSize = sizeof(DEVMODE);
dm.dmDriverExtra = 0;
if (!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm))
{
std::cout << "枚举失败" << std::endl;
}
else
{
std::cout << "===============START=====================" << std::endl;
std::cout << "dmCollate===" << dm.dmCollate << std::endl;
std::cout << "dmBitsPerPel===" << dm.dmBitsPerPel << std::endl;
std::cout << "dmColor===" << dm.dmColor << std::endl;
std::cout << "dmDeviceName===" << dm.dmDeviceName << std::endl;
std::cout << "dmDisplayFlags===" << dm.dmDisplayFlags << std::endl;
std::cout << "dmDisplayFrequency===" << dm.dmDisplayFrequency << std::endl;
std::cout << "dmDitherType===" << dm.dmDitherType << std::endl;
std::cout << "dmDriverExtra===" << dm.dmDriverExtra << std::endl;
std::cout << "dmDriverVersion===" << dm.dmDriverVersion << std::endl;
std::cout << "dmDuplex===" << dm.dmDuplex << std::endl;
std::cout << "dmFields===" << dm.dmFields << std::endl;
std::cout << "dmFormName===" << dm.dmFormName << std::endl;
std::cout << "dmICMIntent===" << dm.dmICMIntent << std::endl;
std::cout << "dmICMMethod===" << dm.dmICMMethod << std::endl;
std::cout << "dmLogPixels===" << dm.dmLogPixels << std::endl;
std::cout << "dmMediaType===" << dm.dmMediaType << std::endl;
std::cout << "dmNup===" << dm.dmNup << std::endl;
std::cout << "dmPanningHeight===" << dm.dmPanningHeight << std::endl;
std::cout << "dmPanningWidth===" << dm.dmPanningWidth << std::endl;
std::cout << "dmPelsHeight===" << dm.dmPelsHeight << std::endl;
std::cout << "dmPelsWidth===" << dm.dmPelsWidth << std::endl;
std::cout << "dmReserved1===" << dm.dmReserved1 << std::endl;
std::cout << "dmReserved2===" << dm.dmReserved2 << std::endl;
std::cout << "dmSize===" << dm.dmSize << std::endl;
std::cout << "dmSpecVersion===" << dm.dmSpecVersion << std::endl;
std::cout << "dmTTOption===" << dm.dmTTOption << std::endl;
std::cout << "dmYResolution===" << dm.dmYResolution << std::endl;
std::cout << "=================END=============================" << std::endl;
}

system("pause");
return 0;
}


输出结果:

屏幕大小(像素) 宽:1920 高:1080
屏幕大小 宽:1920 高:1080
客户区大小(像素) 宽:1920 高:1040
客户区大小(像素) 宽:1920 高:1017
最大化窗口的默认尺寸(像素) 宽:1936 高:1056
===============START=====================
dmCollate===0
dmBitsPerPel===32
dmColor===0
dmDeviceName===00B3FA2C
dmDisplayFlags===0
dmDisplayFrequency===60
dmDitherType===3435973836
dmDriverExtra===0
dmDriverVersion===1025
dmDuplex===0
dmFields===544997536
dmFormName===00B3FA92
dmICMIntent===3435973836
dmICMMethod===3435973836
dmLogPixels===96
dmMediaType===3435973836
dmNup===0
dmPanningHeight===3435973836
dmPanningWidth===3435973836
dmPelsHeight===1080
dmPelsWidth===1920
dmReserved1===3435973836
dmReserved2===3435973836
dmSize===188
dmSpecVersion===1025
dmTTOption===0
dmYResolution===0
=================END=============================


上述代码中,有获得任务栏高度的相关代码!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: