失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Windows客户端开发--获取屏幕分辨率及大小相关

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

时间:2022-12-23 11:59:36

相关推荐

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

今天介绍一下,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_CXICON11#define SM_CYICON12#define SM_CXCURSOR 13#define SM_CYCURSOR 14#define SM_CYMENU15#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_DEBUG22#define SM_SWAPBUTTON 23#define SM_RESERVED1 24#define SM_RESERVED2 25#define SM_RESERVED3 26#define SM_RESERVED4 27#define SM_CXMIN28#define SM_CYMIN29#define SM_CXSIZE30#define SM_CYSIZE31#define SM_CXFRAME 32#define SM_CYFRAME 33#define SM_CXMINTRACK 34#define SM_CYMINTRACK 35#define SM_CXDOUBLECLK36#define SM_CYDOUBLECLK37#define SM_CXICONSPACING 38#define SM_CYICONSPACING 39#define SM_MENUDROPALIGNMENT 40#define SM_PENWINDOWS 41#define SM_DBCSENABLED42#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_SECURE44#define SM_CXEDGE45#define SM_CYEDGE46#define SM_CXMINSPACING 47#define SM_CYMINSPACING 48#define SM_CXSMICON 49#define SM_CYSMICON 50#define SM_CYSMCAPTION51#define SM_CXSMSIZE 52#define SM_CYSMSIZE 53#define SM_CXMENUSIZE 54#define SM_CYMENUSIZE 55#define SM_ARRANGE 56#define SM_CXMINIMIZED57#define SM_CYMINIMIZED58#define SM_CXMAXTRACK 59#define SM_CYMAXTRACK 60#define SM_CXMAXIMIZED61#define SM_CYMAXIMIZED62#define SM_NETWORK 63#define SM_CLEANBOOT 67#define SM_CXDRAG68#define SM_CYDRAG69#endif /* WINVER >= 0x0400 */#define SM_SHOWSOUNDS 70#if(WINVER >= 0x0400)#define SM_CXMENUCHECK71 /* Use instead of GetMenuCheckMarkDimensions()! */#define SM_CYMENUCHECK72#define SM_SLOWMACHINE73#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_CXVIRTUALSCREEN78#define SM_CYVIRTUALSCREEN79#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===0dmBitsPerPel===32dmColor===0dmDeviceName===00B3FA2CdmDisplayFlags===0dmDisplayFrequency===60dmDitherType===3435973836dmDriverExtra===0dmDriverVersion===1025dmDuplex===0dmFields===544997536dmFormName===00B3FA92dmICMIntent===3435973836dmICMMethod===3435973836dmLogPixels===96dmMediaType===3435973836dmNup===0dmPanningHeight===3435973836dmPanningWidth===3435973836dmPelsHeight===1080dmPelsWidth===1920dmReserved1===3435973836dmReserved2===3435973836dmSize===188dmSpecVersion===1025dmTTOption===0dmYResolution===0=================END=============================

上述代码中,有获得任务栏高度的相关代码!!!

如果觉得《Windows客户端开发--获取屏幕分辨率及大小相关》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。