獲取螢幕的解析度(多螢幕或者單螢幕)
我們在做專案的時候,往往會有想要獲取螢幕的解析度的需求。現在我們就來總結一下如何獲取螢幕解析度,不管是單屏還是多屏。
1、RECT deskRect;
GetWindowRect(GetDesktopWindow(),&deskRect);
該函式只能獲取主屏的解析度,也就是說如果有多個顯示器的話,這個函式只能獲取主屏解析度。
而且該函式獲得的結果會受螢幕縮放影響,比如原分變率為1920*1080,且在顯示設定裡設定了125%的縮放的話,得到的結果為1536*864。如果縮放為100%的話,結果為1920*1080.
2、 HDC hdc = GetDC(NULL);
int hdcWidth, hdcHeight;
hdcWidth = GetDeviceCaps(hdc, DESKTOPHORZRES);
hdcHeight = GetDeviceCaps(hdc, DESKTOPVERTRES);
ReleaseDC(NULL, hdc);
該方法也是隻能獲取主屏解析度,與第一種方法一樣,所不同的是它是無視縮放的。即不管你縮放是100%還是125%還是多少,得到的結果都是1920*1080
3、 int allX = GetSystemMetrics(SM_CXSCREEN);
int allY = GetSystemMetrics(SM_CYSCREEN);
該方法也是隻能獲取主屏解析度,與第一種方法得到的結果一模一樣,受縮放影響。
4、
struct ALLMONITORINFO
{
HMONITOR hMonitor;
RECT rect;
bool isPrimary;
};
BOOL CALLBACK MonitorEnumProc(__in HMONITOR hMonitor, __in HDC hdcMonitor, __in LPRECT lprcMonitor, __in LPARAM dwData)
{
vector<ALLMONITORINFO>& infoArray = *reinterpret_cast<vector<ALLMONITORINFO>* >(dwData);
ALLMONITORINFO monitorInfo;
monitorInfo.hMonitor = hMonitor;
//下面這句程式碼已經獲取到了螢幕的解析度,不管你有多少個螢幕都可以獲取到,但是該解析度是受縮放影響的。
monitorInfo.rect = *lprcMonitor;
infoArray.push_back(monitorInfo);
//這裡是另一種獲取螢幕解析度的辦法。
MONITORINFO monInfo;
monInfo.cbSize = sizeof(MONITORINFO);
//這個方法也是會受縮放影響,shit.
BOOL isGet = GetMonitorInfo(hMonitor, &monInfo);
if (isGet == TRUE) {
printf("rect wdith:%d,rect height:%d.\n", monInfo.rcMonitor.right - monInfo.rcMonitor.left, monInfo.rcMonitor.bottom - monInfo.rcMonitor.top);;
}
return TRUE;
}
int main() {
vector<ALLMONITORINFO> mInfo;
mInfo.clear();
//get number of monitors
mInfo.reserve(GetSystemMetrics(SM_CMONITORS));
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, reinterpret_cast<LPARAM>(&mInfo));
//通過列舉之後,顯示器的資訊就儲存到了mInfo裡了。
return 1;
}
第四種方法裡面包括兩種方法,只是GetMonitorInfo函式需要相應的顯示器控制代碼,所以我就放在了一起。
這些方法試下來,只有第四種方法能獲取到主屏外的其他螢幕解析度,但是都是受縮放影響的。所以現在還遺留一個問題,如何獲取到其他螢幕不受縮放影響的解析度?
相關推薦
獲取螢幕的解析度(多螢幕或者單螢幕)
我們在做專案的時候,往往會有想要獲取螢幕的解析度的需求。現在我們就來總結一下如何獲取螢幕解析度,不管是單屏還是多屏。 1、RECT deskRect; GetWindowRect(GetDesktopWindow(),&deskRect); 該函式
iphone各個型號螢幕解析度總結 iphone各個型號螢幕解析度總結
原 iphone各個型號螢幕解析度總結 2018年02月27日 15:52:55 amyloverice 閱讀數:55557
Qt 獲取當前螢幕解析度
使用Qt製作電腦介面的時候就不能避免遇到不同螢幕解析度的電腦。針對不同解析度對自己設定的介面也需要進行一系列的調整。 在Qt5之前獲取螢幕解析度主要使用desktop()函式,但是在Qt5以後就不在使用,而是使用的QScreen。 使用示例: 在標頭檔案宣告: #in
WPFの獲取螢幕解析度並自適應 wpf窗體定位
原文: WPFの獲取螢幕解析度並自適應 double x = SystemParameters.WorkArea.Width;//得到螢幕工作區域寬度 double y = SystemParameters.WorkArea.Height;//得到螢幕工作區域高度 double x1= SystemPa
android之如何檢視模擬器或者真機的螢幕解析度
import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.widget.TextView; public class EX03_05 ext
【WPF】 獲取螢幕解析度並自適應
double x = SystemParameters.WorkArea.Width;//得到螢幕工作區域寬度 double y = SystemParameters.WorkArea.Height;//得到螢幕工作區域高度 double x1= SystemParameters.Prima
獲取和修改計算機螢幕解析度 VC
//獲取解析度 m_nWiondwMetricsX = ::GetSystemMetrics(SM_CXSCREEN); m_nWiondwMetricsY
JS獲取當前網頁大小以及螢幕解析度等
<html> <head> <title>獲取當前物件大小以及螢幕解析度等</title> <body> <div style= " width:88%;margin:30px auto; color:bl
GTK程式設計:獲取螢幕解析度
最近開始學習GTK+圖形介面程式設計了,先寫一些非常基礎的程式。 這個程式實現的功能是:獲取螢幕的解析度。 使用場景:當需要將窗體顯示在螢幕指定的位置的時候,比如居中(當然了,讓窗體居中還有更簡便的
獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊
今天和大家一起分享下如何獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊。相信各位發現通過蘋果官方開放的API想要獲取當前裝置以上的一些資訊似乎做不到。如今蘋果的硬體更新速度相當的快,還要在網上發現有有心人收集了所有已釋出
獲取螢幕解析度和重新整理率
1.Windows API方式:DISPLAY_DEVICE displayDevice;displayDevice.cb = sizeof(DISPLAY_DEVICE);if (EnumDisplayDevices(NULL, adapter, &displayD
關於DisplayMetrics獲取螢幕解析度注意點
import android.util.DisplayMetrics;private DisplayMetrics dm;//螢幕解析度容器dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().get
IOS獲取螢幕解析度
獲取螢幕解析度是個很有用的功能,尤其在一些遊戲相關的開發中,圖形的繪製與螢幕解析度密不可分。得到當前螢幕的解析度是必不可少的支援。 獲取螢幕解析度可以兩步走 1、得到當前螢幕的尺寸: CGRect rect_screen = [[UISc
linux c 獲取螢幕解析度程式
把這個程式執行下字元終端下到解析度就出來了。 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <linux/fb.h&g
Android手機獲取螢幕解析度高度因虛擬導航欄帶來的問題
大家都知道,Android系統在4.4(KITKAT)版本後,增加了更炫的互動,並且對於標題欄和狀態列也增加了可定製化,於此同時在獲取手機解析度的時候一些舊方法已經不那麼好使了。 常用獲取螢幕解析
linux下獲取當前螢幕解析度
首先需要更改螢幕檔案fb0許可權,以供使用者開啟 終端命令列輸入: chmod 0777 /dev/fb0 vi 新建一個.c檔案 #include<stdio.h> #include<sys/types.h> #include
【Unity開發】Unity獲取裝置螢幕解析度
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { void S
除錯經驗——VBA獲取螢幕解析度
看這些引數,給人一種老掉牙的感覺,在此列出,僅備一時之需。 Public Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Public Const S
獲取螢幕解析度
1.獲取螢幕的解析度 CRect rectWind; this->GetClientRect(rectWind); int iHeight = rectWind.Height(); int iWidth = rectWind.Width(); 2.使對話方
Unity UI(十一):多螢幕解析度下的UI佈局
多螢幕解析度下的UI佈局一般考慮兩個問題: 1、佈局元素的位置,即螢幕解析度變化的情況下,佈局元素的位置可能固定不動,導致佈局元素可能超出邊界; 2、佈局元素的尺寸,即在螢幕解析度變化的情況下,佈局元素的大小尺