1. 程式人生 > >獲取螢幕的解析度(多螢幕或者單螢幕)

獲取螢幕的解析度(多螢幕或者單螢幕)

我們在做專案的時候,往往會有想要獲取螢幕的解析度的需求。現在我們就來總結一下如何獲取螢幕解析度,不管是單屏還是多屏。 

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、佈局元素的尺寸,即在螢幕解析度變化的情況下,佈局元素的大小尺