日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于获取多个屏幕分辨率以及进行一些设置

發布時間:2025/3/15 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于获取多个屏幕分辨率以及进行一些设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Windows下提示顯示器信息主要通過兩個函數實現。一個是EnumDisplayDevices(), 另一個是EnumDisplayMonitors().
EnumDisplayDevices()枚舉所有顯示設備,而EnumDisplayMonitors枚舉的是所有顯示器。
顯示設備和顯示器不一樣,比如顯卡算顯示設備,但是不是顯示器。
EnumDisplayMonitors()還會枚舉出不可見的偽顯示器,如果只是想得到實際的顯示器數目的話可以用GetSystemMetrics(SM_CMONITORS),該函數不包括虛擬顯示器。
MonitorInfoex 和MonitorInfo 在這兩個結構中保存著相應顯示器的相關信息,如坐標、是否為主顯示器等 GetMonitorInfo ( )  取得指定顯示器的相關信息,如物理顯示區大小等
MonitorFromPoint ( )  取得指定點所在的顯示器句柄
MonitorFromRect ( )  取得指定矩形所在的顯示器句柄
MonitorFromWindow( )  取得指定窗口所在的顯示器句柄
MonitorEnumProc( ) 當應用程序調用EnumDisplayMonitors ( )查詢顯示器個數時,系統自動為每一個顯示器調用一次該函數。應用程序可以依此判斷顯示器的個數、位置及顯示區域的大小等信息
函數名:MonitorEnumProc()
輸入參數:HMONITOR hMonitor ---顯示器句柄
????????? HDC hdcMonitor? ----顯示器DC句柄
???? ?? LPRECT lprcMonitor-----
???? ?? LPARAM dwData-----EnumDisplayMonitors傳來的數據
返回:bool
功能:若返回為真,EnumDisplayMonitors繼續枚舉,
????? 若返回為假,EnumDisplayMonitors停止枚舉,從而獲得顯示器信息
MonitorAdapter.h #include <atlstr.h> #include <vector> #include <WinDef.h> #include <tchar.h> using std::vector;using namespace std;#define MAX_MONITOR_NAME 256static std::vector<HMONITOR> g_hMonitorGroup; // 顯示器模式信息 typedef struct MonitorModeInfo_t {unsigned int m_nWidth; unsigned int m_nHeight;MonitorModeInfo_t(int nWidth, int nHeight) : m_nWidth(nWidth), m_nHeight(nHeight) {} }MonitorModeInfo;// 顯示器信息 struct MonitorInfo {TCHAR szDevice[MAX_MONITOR_NAME]; // 顯示器名稱std::vector<MonitorModeInfo> m_vecModeInfo; // 當前名稱的顯示器支持的分辨率模式 };typedef std::vector<MonitorInfo> VEC_MONITORMODE_INFO; // 所有的顯示器信息 class MonitorAdapter { public:MonitorAdapter();~MonitorAdapter();// 回調函數static int CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdc,LPRECT lpRMonitor,LPARAM dwData);// 得到所有顯示器的名稱void GetAllMonitorName(VEC_MONITORMODE_INFO& m_vecMonitorListInfo);// 得到所有顯示器的模式void GetAllDisplayMode(VEC_MONITORMODE_INFO& m_vecMonitorListInfo);//得到屏幕當前分辨率void GetCurrentReselotion(int& nWidth,int& nHeight,int& nFreq,int& nBits);//根據屏幕ID取獲取屏幕的對應分辨率void GetCurrentReselotion(LPCWSTR lpszDeviceName, int& nWidth, int& nHeight, int& nFreq, int& nBits);//修改分辨率int ChangMonitorReselotion(HMONITOR hMonitor,const int nWidth,const int nHight,const int nFre,const int nColorBits); };
MonitorAdapter.cpp #include "stdafx.h" #include "MonitorAdapter.h"MonitorAdapter::MonitorAdapter(void) { }MonitorAdapter::~MonitorAdapter(void) { }int CALLBACK MonitorAdapter::MonitorEnumProc(HMONITOR hMonitor, HDC hdc,LPRECT lpRMonitor,LPARAM dwData) {g_hMonitorGroup.push_back(hMonitor);return 1; }// 得到所有顯示器的名稱 void MonitorAdapter::GetAllMonitorName(VEC_MONITORMODE_INFO& vecMonitorListInfo) {g_hMonitorGroup.clear();::EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, 0);//vector<HMONITOR>::iterator ithMoniter = g_hMonitorGroup.begin();for(int i = 0; i < g_hMonitorGroup.size();i++){MONITORINFOEX mixTemp;memset(&mixTemp, 0, sizeof(MONITORINFOEX));mixTemp.cbSize = sizeof(MONITORINFOEX);GetMonitorInfo(g_hMonitorGroup[i], &mixTemp);VEC_MONITORMODE_INFO::iterator itBeg = vecMonitorListInfo.begin();VEC_MONITORMODE_INFO::iterator itEnd = vecMonitorListInfo.end();for(; itBeg != itEnd; ++itBeg){if( 0 == _tcscmp(mixTemp.szDevice, itBeg->szDevice)){break;}}//沒有在列表中找到,則需要添加if (itBeg == itEnd) {MonitorInfo tmpMonitorInfo;_tcscpy_s(tmpMonitorInfo.szDevice, sizeof(tmpMonitorInfo.szDevice), mixTemp.szDevice);vecMonitorListInfo.push_back(tmpMonitorInfo);}} }// 得到所有顯示器的模式 void MonitorAdapter::GetAllDisplayMode(VEC_MONITORMODE_INFO& vecMonitorListInfo) {GetAllMonitorName(vecMonitorListInfo);bool bRetVal;DEVMODE devmode;VEC_MONITORMODE_INFO::iterator itBeg = vecMonitorListInfo.begin();VEC_MONITORMODE_INFO::iterator itEnd = vecMonitorListInfo.end();for (NULL; itBeg != itEnd; ++itBeg){int iMode = 0;do{bRetVal = ::EnumDisplaySettings(itBeg->szDevice, iMode, &devmode);iMode++;if (bRetVal){bool bFind = false;vector<MonitorModeInfo>::iterator itBeg_Mode = itBeg->m_vecModeInfo.begin();vector<MonitorModeInfo>::iterator itEnd_Mode = itBeg->m_vecModeInfo.end();for (NULL; itBeg_Mode != itEnd_Mode; ++itBeg_Mode){// 如果已經在列表中找到,則結束本次循環if ((itBeg_Mode->m_nWidth == devmode.dmPelsWidth) && (itBeg_Mode->m_nHeight == devmode.dmPelsHeight)){bFind = true;break;}// 插入數據時,從 大到小排列 (按windows 分辨率設置,優先比較 寬) if ((itBeg_Mode->m_nWidth < devmode.dmPelsWidth) ||((itBeg_Mode->m_nWidth == devmode.dmPelsWidth) && (itBeg_Mode->m_nHeight < devmode.dmPelsHeight))){ break;}}if(!bFind){if (itBeg_Mode == itEnd_Mode){itBeg->m_vecModeInfo.push_back(MonitorModeInfo(devmode.dmPelsWidth, devmode.dmPelsHeight)); }else{itBeg->m_vecModeInfo.insert(itBeg_Mode, MonitorModeInfo(devmode.dmPelsWidth, devmode.dmPelsHeight)); }}}}while (bRetVal); } }int MonitorAdapter::ChangMonitorReselotion(HMONITOR hMonitor,const int nWidth,const int nHight,const int nFre,const int nColorBits) {if ( NULL == hMonitor ){return -1;}MONITORINFOEX mi;mi.cbSize = sizeof(mi);GetMonitorInfo( hMonitor , &mi);DEVMODE DeviceMode;ZeroMemory(&DeviceMode, sizeof(DEVMODE));DeviceMode.dmSize = sizeof(DEVMODE); BOOL bFlag = TRUE;bFlag = EnumDisplaySettings(mi.szDevice, ENUM_CURRENT_SETTINGS, &DeviceMode);if ( bFlag != TRUE ){return -1;} if (DeviceMode.dmPelsWidth == nWidth && DeviceMode.dmPelsHeight == nHight ){return 0;}DeviceMode.dmDisplayFlags = 0;DeviceMode.dmPelsWidth= nWidth; DeviceMode.dmPelsHeight = nHight;DeviceMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY ;int nRet = ChangeDisplaySettingsEx(mi.szDevice, &DeviceMode, NULL, CDS_GLOBAL | CDS_NORESET | CDS_UPDATEREGISTRY, NULL);if (DISP_CHANGE_BADMODE == nRet){ChangeDisplaySettingsEx(mi.szDevice, &DeviceMode, NULL, CDS_GLOBAL | CDS_NORESET | CDS_UPDATEREGISTRY, NULL); }if ( DISP_CHANGE_SUCCESSFUL == nRet ){return 0;}return -1; }void MonitorAdapter::GetCurrentReselotion(int& nWidth,int& nHeight,int& nFreq,int& nBits) {DEVMODE DeviceMode;EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DeviceMode);nWidth = DeviceMode.dmPelsWidth;nHeight = DeviceMode.dmPelsHeight;nFreq = DeviceMode.dmDisplayFrequency;nBits = DeviceMode.dmBitsPerPel; }void MonitorAdapter::GetCurrentReselotion(LPCWSTR lpszDeviceName, int& nWidth, int& nHeight, int& nFreq, int& nBits) {DEVMODE DeviceMode;EnumDisplaySettings(lpszDeviceName, ENUM_CURRENT_SETTINGS, &DeviceMode);nWidth = DeviceMode.dmPelsWidth;nHeight = DeviceMode.dmPelsHeight;nFreq = DeviceMode.dmDisplayFrequency;nBits = DeviceMode.dmBitsPerPel; }
test #include "stdafx.h" #include "MonitorAdapter.h"int _tmain(int argc, _TCHAR* argv[]) {MonitorAdapter m_monitorAdapter; //顯示器VEC_MONITORMODE_INFO vecMointorListInfo;m_monitorAdapter.GetAllDisplayMode(vecMointorListInfo);int nWidth = 0, nHeight = 0, nFreq = 0, nBits = 0;VEC_MONITORMODE_INFO::iterator itBeg = vecMointorListInfo.begin();for (int i = 0; i < vecMointorListInfo.size();i++){//得到當前顯示器分辨率 刷新率 色位m_monitorAdapter.GetCurrentReselotion(itBeg->szDevice, nWidth, nHeight, nFreq, nBits);itBeg++;nWidth = 0, nHeight = 0, nFreq = 0, nBits = 0;}return 0; }

總結

以上是生活随笔為你收集整理的关于获取多个屏幕分辨率以及进行一些设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久美女av | 精品少妇一区二区三区在线观看 | 欧美日韩亚洲一区二区 | 亚洲婷婷在线视频 | 日本妇乱大交xxxxx | 日本精品免费一区二区三区 | 桃色av| 久热精品视频在线播放 | 久久三级网站 | 中文字幕日本在线观看 | 国产欧美一区在线观看 | 韩国三级hd中文字幕 | 在线观看黄色小视频 | 女人下边被添全过视频 | 亚洲专区中文字幕 | 免费国产黄色网址 | 性xxx18| 熟女视频一区 | 日韩欧美中文一区 | 亚洲中文字幕无码一区 | 久久成人国产精品入口 | 久久一道本 | 秋霞毛片 | 久久在线播放 | 一级看片免费视频 | 男女午夜免费视频 | 性高跟鞋xxxxhd国产电影 | 爱如潮水3免费观看日本高清 | 欧美mv日韩mv国产 | 老司机久久精品视频 | 国产a免费观看 | 久久激情综合网 | 玉米地疯狂的吸允她的奶视频 | 青草久久网| 人人射人人射 | 亚洲综合图片网 | 色欲狠狠躁天天躁无码中文字幕 | 中文字幕精品在线观看 | 免费看一级片 | 中文区中文字幕免费看 | 亚洲免费观看高清 | 成年视频在线观看 | 在线观看av资源 | 色av资源 | 天堂国产一区二区三区 | 亚洲综合日韩 | 成人有色视频 | 免费在线a| 国产又爽又黄的激情精品视频 | 丝袜高跟av | 国产精品无圣光 | 二区三区在线 | 有声小说 成人专区 | 婷婷色综合 | 国产又粗又黄又爽又硬 | 久久国产精品久久久久久电车 | 在线免费观看日本 | 精品网站999 | 久久国产一区 | 一级片毛片 | 亚洲精品久久久久久一区二区 | 亚洲喷水 | 每日更新在线观看av | 撸撸在线视频 | 超碰伊人网 | 操操综合 | 欧美91视频| 国产黄色大片在线观看 | 欧美人与动物xxxx | 国产51页 | av网站在线看 | 中日韩男男gay无套 人人草人人干 | 国产豆花视频 | 欧美极品aaaaabbbbb| 中文字字幕 | 奇米精品一区二区三区在线观看一 | 一级的大片| 欧美日本韩国 | 欧美性一区二区三区 | 国产精品夜夜嗨 | 一级生活毛片 | 福利av在线 | 色视频在线看 | 欧美女人天堂 | 国产在线中文字幕 | 国产黄色小视频在线观看 | 色婷婷av一区二区三区四区 | 精品久久久久久久久久久aⅴ | 米奇影视第四色 | 无码人妻精品一区二区三应用大全 | 日本福利社 | 欧美日韩亚洲国产精品 | 欧美精品久久久久久久久 | 精品妇女一区二区三区 | 密臀av在线播放 | 国产精品久久久久久久久免费看 | 嫩操影院 | 777四色| 亚洲精品国产片 |