如何在程式中動態設定牆紙

2021-07-06 10:18:15 字數 1448 閱讀 6992

大家都知道設定windows桌面牆紙的win32 api是systemparametersinfo, 使用spi_setdeskwall*****引數便能設定牆紙:

::systemparametersinfo(spi_setdeskwall*****, 0, "c:\\abitmap.bmp", spif_sendwininichange | spif_updateinifile);

但問題並沒有解決,因為這個win32 api有很大的侷限性

1. 無法把jpeg, gif等其他非位圖格式的設為牆紙。

2. 無法調整牆紙的式樣,即無法設定牆紙為居中,平鋪或拉伸。(當然我們可以通過程式設計改變登錄檔hkey_current_user\control panel\desktop的值來做到這一點)

由於在顯示屬性系統對話方塊內很容易手動設定這些選項,我們有理由相信,windows shell api一定提供了相應的比較高層的函式,介面或類來完成牆紙的設定。事實上,windows shell api中確實存在完成這個任務的介面:iactivedesktop。

以下是我所完成的設定牆紙的函式

//strpicfile是影象檔名,支援bmp jpeg gif等格式

//dwstyle是牆紙的樣式

//wpstyle_center 居中 0

//wpstyle_tile 平鋪 1

//wpstyle_stretch 拉伸 2

//wpstyle_max 3

//返回值是true時牆紙設定成功,返回false時失敗

bool setwall*****(cstring &strpicfile, dword dwstyle)

在mfc程式中應用此函式時,須注意以下三點。

1.在函式所在檔案中加上宣告iactivedesktop的標頭檔案

#include

2.在stdafx.h中插入#include

位置不能搞錯,否則iactivedesktop將找不到定義

#include // mfc core and standard components

#include // note: corrects compilation errors w/iactivedesktop!!

#include // mfc extensions

afxoleinit();

補充:只有在安裝了ie4.0及以上版本時才能應用iactivedesktop介面,只有在開啟active desktop(活動桌面)的情況下才能應用setwall*****函式,下面是啟用或關閉active desktop的函式:

//benable是true時啟用active desktop, 是false時關閉

//返回值是true時啟用或關閉active desktop成功,返回false時失敗

bool enableactivedesktop(bool benable)

(

如何在程式中延時

方法一 使用sleep函式,如延時2秒,用sleep 2000 方法二 使用sleep函式的不利在於延時期間不能處理其他的訊息,如果時間太長,就好象宕機一樣,利用coledatetime類和coledatetimespan類實現延時就不會出現那樣的問題 coledatetime start time...

Linux gdb如何在動態庫函式裡面設定斷點

一 材料準備 1 標頭檔案 function.h 2 c檔案 function.c main.c function.h 乙個簡單的標頭檔案,宣告了函式func a func b ifndef function h define function h include void func a void ...

如何在EXCEL SHEET中 動態新增控制項

excel sheet中如何新增下拉框或者 文字框,命令按鈕?下面的方法就可以 1 新建worksheet 2 開啟visiual basic編輯器 3 選擇sheet1 的worksheet selectionchange 事件 4 編寫 如下 private sub worksheet sele...