用VC實現動態改變Windows的顯示特性

來源:互聯網
上載者:User

對於Windows平台,顯示器的分辯率、顏色數、重新整理率等特性很重要,尤其是對於多媒體 應用軟體和遊戲軟體。在很多情況下,使用者當前的螢幕設定並不適合軟體的運行需要,軟體 通常的做法是提示使用者將螢幕設定到軟體要求的分辯率及顏色數,再重新啟動軟體。這樣無 疑會增加普通使用者操作上的負擔和困難,降低了軟體的友好性和易用性。理想的作法是:在 軟體開始時,動態改變螢幕設定來達到軟體啟動並執行要求。在軟體運行結束後,再自動把屏 幕設定改回原來的設定值。這一切過程都在不知不覺中完成。本例示範了動態設定系統顯示 分辯率,只要系統的硬體的支援,你可以將解析度設定為1024*768或800*600;色彩設定為8 位、24位、32位等。程式編譯運行後的介面效果如圖一所示:

圖一、設定系統解析度的程式介面效果圖

一、編程方法

我們知道, 顯示器所顯示的內容對應於顯存,在顯示器上最小的單位是象素(Pixel,這裡僅考慮邏輯象 素),顯存的最小的單位是位(Bits)。 顯示器工作的特徵主要體現在色彩數和解析度兩方面 。顯示器所顯示的色彩的數目取決於單位象素所使用的顯存的位元(Bits)。在顯存中,如果8 位顯存(即一個向象素使用了一位元組的顯存)對應於顯示器上的一個象素,那麼顯示器所顯示 的色彩數目為28=256色;同樣,如果當前的色彩為16位,那麼顯示器所顯示的色彩數目為 216=65536種色彩。顯示器的解析度指的是水平解析度和垂直解析度,經常所說的800X600, 就是指在水平方面上所顯示的象素為800個,在垂直方面上所顯示的象素為600個。

在 VC中提供了修改顯示裝置(如顯示器、印表機等等,本文只就顯示器而言)屬性的函數 ChangeDisplaySettings(),該函數能夠按照你的需要對顯示裝置作出相應的修改。其函數 的原型為:LONG ChangeDisplaySettings(LPDEVMODE lpDevMode, DWORD dwflags),其參數 的含義如下:

lpDevMode:一個指向DEVMODE資料結構的指標,DEVMODE的資料結構描 述了欲設定顯示器的各類屬性值。通常情況下使用到的成員變數有:

dmSize:所用 DEVMODE資料結構的大小(以Bytes為單位);

dmBitsPerPel :每象素所使用的顯存 位元(Bits);

dmPelsWidth :水平解析度(點數);

dmPelsHeight Pixel height :垂直解析度(點數);

dmDisplayFrequency :顯示重新整理率,以赫茲為單位 ;

dmFields:通常情況下,不同的顯示裝置(如印表機)用到的DEVMODE資料結構的 內容不同,比如設定印表機時,你不會用到dmDisplayFrequency屬性。所以,在你使用 DEVMODE資料結構時,應向系統說明你具體用到的有效資料成員,dmFields的用處便在於此。 如果在程式中只用到dmPelsWidth(水平解析度)和dmPelsHeight(垂直解析度),那麼該值 應為DM_PELSWIDTH|DM_PELSHEIGHT。

Dwflags:表明對顯示裝置的修改方式。具體取 值有以下幾種:0 :動態改變顯示裝置屬性;CDS_UPDATEREGISTRY:動態改變顯示裝置屬性 並修改註冊表相關設定,下次啟動電腦時,本次所做的修改依然有效;CDS_TEST:測試所 做的修改是否有效。

上述函數調用後傳回值如下:DISP_CHANGE_SUCCESSFUL:修改成 功;DISP_CHANGE_RESTART :修改後需重新啟動(在顯示器設定中選擇了"應用新的顏色 前重新啟動電腦"); DISP_CHANGE_FAILED :修改失敗;DISP_CHANGE_BADMODE:修 改模式錯誤(比如你的顯示器是單色的,但你卻將之修改為256色的)。如果在函數調用時,參 數lpDevMode為NULL且dwflags 為0, 則顯示裝置使用註冊表當前值來設定顯示特性。以上是 ChangeDisplaySettings()函數的最常見的用法,更詳細的說明請參見MSDN。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.