1. 程式人生 > >GetDeviceCaps獲取與修改顯示器屬性

GetDeviceCaps獲取與修改顯示器屬性

int pixelxperinch = dc.GetDeviceCaps(LOGPIXELSX);//每英寸水平邏輯畫素數
int pixelyperinch = dc.GetDeviceCaps(LOGPIXELSY);//每英寸垂直邏輯畫素數
int pixelx = dc.GetDeviceCaps(HORZRES);//水平畫素總數
int pixely = dc.GetDeviceCaps(VERTRES);//垂直畫素總數
int hmm = dc.GetDeviceCaps(HORZSIZE);//水平毫米數
int vmm = dc.GetDeviceCaps(VERTSIZE);//垂直毫米


以上三者的關係通常滿足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX

    HORZSIZE為螢幕水平尺寸(定為度量尺寸,以mm計),HORZRES為水平的畫素總數(定為畫素大小,平時所說的螢幕解析度,但在這不這麼稱呼。這裡,解析度定為“每英寸的畫素數”),LOGPIXELSX為邏輯畫素(假設的每英寸的畫素數,並不是剛才所說的實際的“解析度”)。因此HORZSIZE也稱為邏輯寬度。
    當我們選擇“顯示”屬性裡的大字型時,LOGPIXELSX(通常分為96dpi與120dpi)變大了,這樣假設原來的字型為10磅,則原來的字型橫向所佔畫素(實際所佔的畫素數)為10*(1/72)*LOGPIXELSX,現在LOGPIXELSX變大了,則字型所佔畫素也大了,因此看起來字型大了。如果HORZRES不變的話,則HORZSIZE應該變小。然而這是和Windows有關的,在16位OS中,HORZSIZE值是固定的。

    在XP系統上驗證了一下,發現HORZSIZE值與LOGPIXELSX的值也是不變的,如果改變HORZRES的話,則HORZSIZE會發生相應變化,但LOGPIXELSX不變,一直是96。
    驗證數值是:當HORZRES/VERTRES分別為800/600、1280/1024、1360/768時,LOGPIXELSX/LOGPIXELSY一直為96,但HORZSIZE/VERTSIZE分別為320/240、375/300、400/320。於是個人斷定:LOGPIXELSX/LOGPIXELSY與所選的字型(如TrueType)有關,Windows預設的字型LOGPIXELSX/LOGPIXELSY值是定的,選大字型或小字型取它們的值都是一樣的,而一些字型是不同的。而HORZSIZE/VERTSIZE與系統版本有關,在有的系統中,這兩個值是適合此解析度的標準顯示器的尺寸(定值,長寬比與解析度的比一樣),不是通過公式計算的,也不等於公式計算的值;而有的系統版本這兩個值為公式所得的值。



CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST);
pListBox->ResetContent();


//建立顯示裝置上下文
HDC hdc = CreateDC(_T("display"), NULL, NULL, NULL);


//顏色深度
int nBitsPerPixel=GetDeviceCaps(hdc, BITSPIXEL);
//水平解析度
int nWidth = GetDeviceCaps(hdc, HORZRES);
//垂直解析度
int nHeight = GetDeviceCaps(hdc, VERTRES);      
//重新整理率
int nDisplayFrequency = GetDeviceCaps(hdc, VREFRESH); 


CString strText = _T("");
strText.Format(_T("顏色深度:   %d 位"), nBitsPerPixel);
pListBox->AddString(strText);
strText.Format(_T("水平解析度: %d 畫素"), nWidth);
pListBox->AddString(strText);
strText.Format(_T("垂直解析度: %d 畫素"), nHeight);
pListBox->AddString(strText);
strText.Format(_T("重新整理率:     %d 赫茲"), nDisplayFrequency);
pListBox->AddString(strText);


DEVMODE DevMode;


//顏色深度
if (m_ctrlBitsPerPixel.GetCurSel() == 0)
{
DevMode.dmBitsPerPel = 16;
}
else if (m_ctrlBitsPerPixel.GetCurSel() == 1)
{
DevMode.dmBitsPerPel = 32;
}
//解析度
if (m_ctrlPixels.GetCurSel() == 0)
{
DevMode.dmPelsWidth = 800;
DevMode.dmPelsHeight = 600;
}
else if (m_ctrlPixels.GetCurSel() == 1)
{
DevMode.dmPelsWidth = 1024;
DevMode.dmPelsHeight = 768;
}
//重新整理率
if (m_ctrlDispalyFrequencry.GetCurSel() == 0)
{
DevMode.dmDisplayFrequency = 60;
}
else if (m_ctrlDispalyFrequencry.GetCurSel() == 1)
{
DevMode.dmDisplayFrequency = 75;
}
DevMode.dmSize = sizeof(DEVMODE);  
DevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | 
DM_BITSPERPEL | DM_DISPLAYFREQUENCY; 


//設定顯示屬性
LONG nResult = ChangeDisplaySettings(&DevMode, 0);
if (nResult == DISP_CHANGE_SUCCESSFUL)  
{
//用新的設定引數更新登錄檔
ChangeDisplaySettings(&DevMode, CDS_UPDATEREGISTRY);


AfxMessageBox(_T("設定顯示屬性成功。"));
}
else  
{
//恢復預設設定
ChangeDisplaySettings(NULL, 0);

AfxMessageBox(_T("設定顯示屬性失敗。"));
}


//設定顯示器為省電模式
::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 1);


Sleep(2000);


//開啟顯示器
::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1);


Sleep(1000);


//關閉顯示器
::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2);


Sleep(2000);


//開啟顯示器
::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

相關推薦

GetDeviceCaps獲取修改顯示器屬性

int pixelxperinch = dc.GetDeviceCaps(LOGPIXELSX);//每英寸水平邏輯畫素數int pixelyperinch = dc.GetDeviceCaps(LOGPIXELSY);//每英寸垂直邏輯畫素數int pixelx = dc

利用反射獲取修改private的屬性的值

fieldValue = The Private Value fieldValue = As you see,privateString 'value is changed! Exception in thread "main" java.lang.IllegalAccessException: Clas

Angular 通過註入 $location 獲取修改當前頁面URL

rip clip comm source font float back 屬性 margin 以下獲取與修改的 URL 以 ( http://172.16.0.88:8100/#/homePage?id=10&a=100 ) 為例 【一】獲取 (不修改URL)

Angular 通過注入 $location 獲取修改當前頁面URL

以下獲取與修改的 URL 以  ( http://172.16.0.88:8100/#/homePage?id=10&a=100  ) 為例 【一】獲取 (不修改URL) //

通過反射獲取修改修改後物件的屬性

public static Map<String, Map<String, String>> compile(Object old_,Object new_) { Map<String, Map<String, String>> map =

背水一戰 Windows 10 (87) - 文件系統: 獲取文件的屬性, 修改文件的屬性, 獲取文件的縮略圖

esc spl () protect nbsp mob classType log location [源碼下載] 背水一戰 Windows 10 (87) - 文件系統: 獲取文件的屬性, 修改文件的屬性, 獲取文件的縮略圖 作者:webabcd介紹背水一戰 Wind

【Python】字典或者對象類型中鍵或者屬性獲取存在性判斷

ssss som lse dma 一點 ror orm something erro # 定義測試用對象A,字典B class A(object): length = 10 B ={"length":10} # 判斷對象是否含有某種屬性 # 推薦這種方式,更Py

Java基礎之反射例項(例項化Account修改屬性

要求:    設計Account類,並且新增屬性id、name、balance,新增get和set方法與存取錢的方法。    設計ReflectAccountTest類,例項化Account物件,存如100元,與取1000元的結果顯示。 &nb

Android O Settings原始碼流程分析(資料載入之獲取修改預設設定屬性值)

Android O Settings  靜態介面篇 介面渲染篇 資料載入篇之一級選單 資料載入篇之二級選單 資料載入篇之獲取及修改預設設定屬性值 搜尋欄篇 載入預設設定值及修改:(涉及SettingsProvider) 示例:(裝置自動亮

通過Java獲取資料表的屬性對應的值

我最近在做一個數據庫加密的專案,其中需要獲取每個表的屬性與對應的值,本來打算用HashMap儲存,但是由於Attribute是重複的,理由會有username='peter',username='sam'等這樣的重複的Attribute,最後打算寫成Attribute=Value這樣的格式,並存

jQuery和js一些標籤屬性獲取修改方法以及區別

因為自己總是在jQuery和js寫function的時候,總是把兩者之間混淆,一直想總結以下這2這區別和使用的方式,所以就查了下,再加上了自己平時記錄的,總結下,為了下次自己再次混淆的時候可以直接看自己的部落格查詢,同時也給大家提供便利,以下有轉載的部分,我已經提供了出處,

jQuery中的attr()prop()設定屬性獲取屬性的區別

jQuery中的attr()與prop()設定屬性、獲取屬性的區別 一、checkbox的屬性設定選中或不選中 舉例,比如我們要獲取checkbox的屬性或者設定checkbox選中或不選

Jquery獲取修改dom元素的屬性

獲取內容的方式: - text()、html() 以及 val() 三個簡單實用的用於 DOM 操作的 jQuery 方法: text() - 設定或返回所選元素的文字內容 html() - 設

操縱DOM之---attr 獲取設定屬性的值

在使用JavaScript編寫網頁程式碼的過程中,多數時間都在操縱DOM,比如Ajax返回json資料、動態地向DOM新增顯示節點或者是動態地更改頁面上元素的CSS和屬性等。DOM的全稱是Document Object Model,即文件物件模型,是一種與瀏覽器

SoapUI對於Json資料進行屬性獲取傳遞

        SoapUI的Property Transfer功能可以很好地對介面請求返回的資料進行引數屬性獲取與傳遞,但對於Json資料,SoapUI會把資料格式先轉換成XML格式,但實際情況卻是

jQuery 修改CSS樣式 attr方法-獲得修改元素屬性

-------------------------------- attr方法------------------------------------------ <!DOCTYPE html> <html lang="en"> <head&g

JSP中獲取properties文件屬性

util port char rip text request taglib test 文件屬性 <%@ page contentType="text/html;charset=UTF-8" import="java.util.ResourceBundle"%>

線程棧溢出線程屬性

數據 int 地址 這不 log thread 空間 bsp tail http://blog.csdn.net/qq_27231343/article/details/52562196 那麽過多的遞歸調用為什麽會引起棧溢出呢?事實上,函數調用的參數是通過棧空間來傳遞的

Android學習探索之App多渠道打包及動態添加修改資源屬性

Android App 前言: 關於Android渠道打包是一個比較老的話題,今天主要記錄總結一下多渠道打包以及如果動態配置修改一些資源屬性。今天以公司實際需求為例進行演示,由於項目復用很多公共的業務組件,而且業務組件之間的跳轉采用Scheme協議,每個業務組

jQuery匹配id 批量修改css屬性

val log bsp hid spa div span 屬性 flow 1 <ul id="foreignCurrencyTree_1_ul"> 2 <li id="foreignCurrencyTree_11_li">111111&