在C++ Builder中要實現(xiàn)桌布的自動更換功能,我認為主要兩個關鍵點,其一既然要“自動”那就免不了要用到定時器,我們可以用Timer這個組件來完成,這個還好解決,第二個問題可能比較麻煩了,我們如何來設置桌布,好像BCB中并沒有提供什么組件,那我們也就只好自力更生了,雖說本人只是一只菜鳥,但這個問題還是難不了我,它主要是用到了SystemParametersInfo 這個Windows API函數(shù),它的聲明如下:
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);
它是一個非常重量級的函數(shù),主要用來設置或獲得系統(tǒng)范圍上的相關參數(shù)(如:我正在介紹的“如何設置桌布”,還有如:系統(tǒng)字體,屏幕分辨率等),其實光從字面上也能大概知道它的作用。如果只是簡單的調用SystemParametersInfo函數(shù)的話,問題就變得簡單多了,但你要總不能只使用默認的桌布樣式,所以在設置桌布之前還應先設置好桌布的樣式,比如:桌布的顯示位置,是否填滿桌面等,然后再調用SystemParametersInfo函數(shù),這個函數(shù)會根據注冊表里的桌布樣式設置情況來設置實際的桌布樣式。
與桌布樣式有關的注冊表設定:(位于HKEY_CURRENT_USER\Control Panel\Desktop鍵)
注意:
其實,上表還漏了TileWallpaper鍵,這個設定值的優(yōu)先級,即當TileWallpaper這個值為1時,不管其它參數(shù)為何值,都會將桌布填滿桌面,為了簡化程序,一般將其設置為0,然后在根據WallPaperStyle來設置桌布樣式,這是比較明智的做法。
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);
它是一個非常重量級的函數(shù),主要用來設置或獲得系統(tǒng)范圍上的相關參數(shù)(如:我正在介紹的“如何設置桌布”,還有如:系統(tǒng)字體,屏幕分辨率等),其實光從字面上也能大概知道它的作用。如果只是簡單的調用SystemParametersInfo函數(shù)的話,問題就變得簡單多了,但你要總不能只使用默認的桌布樣式,所以在設置桌布之前還應先設置好桌布的樣式,比如:桌布的顯示位置,是否填滿桌面等,然后再調用SystemParametersInfo函數(shù),這個函數(shù)會根據注冊表里的桌布樣式設置情況來設置實際的桌布樣式。
與桌布樣式有關的注冊表設定:(位于HKEY_CURRENT_USER\Control Panel\Desktop鍵)
注意:
其實,上表還漏了TileWallpaper鍵,這個設定值的優(yōu)先級,即當TileWallpaper這個值為1時,不管其它參數(shù)為何值,都會將桌布填滿桌面,為了簡化程序,一般將其設置為0,然后在根據WallPaperStyle來設置桌布樣式,這是比較明智的做法。