人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

C++ Builder完成桌布自動更新

C++ Builder完成桌布自動更新

更新時間:2022-07-21 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

  在C++ Builder中要實(shí)現(xiàn)桌布的自動更換功能,我認(rèn)為主要兩個關(guān)鍵點(diǎn),其一既然要“自動”那就免不了要用到定時器,我們可以用Timer這個組件來完成,這個還好解決,第二個問題可能比較麻煩了,我們?nèi)绾蝸碓O(shè)置桌布,好像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ù),主要用來設(shè)置或獲得系統(tǒng)范圍上的相關(guān)參數(shù)(如:我正在介紹的“如何設(shè)置桌布”,還有如:系統(tǒng)字體,屏幕分辨率等),其實(shí)光從字面上也能大概知道它的作用。如果只是簡單的調(diào)用SystemParametersInfo函數(shù)的話,問題就變得簡單多了,但你要總不能只使用默認(rèn)的桌布樣式,所以在設(shè)置桌布之前還應(yīng)先設(shè)置好桌布的樣式,比如:桌布的顯示位置,是否填滿桌面等,然后再調(diào)用SystemParametersInfo函數(shù),這個函數(shù)會根據(jù)注冊表里的桌布樣式設(shè)置情況來設(shè)置實(shí)際的桌布樣式。

  與桌布樣式有關(guān)的注冊表設(shè)定:(位于HKEY_CURRENT_USERControl PanelDesktop鍵)


鍵名含義
WallPaper桌布的文件名,但只限于BMP格式的位圖
WallPaperStyle設(shè)置桌布樣式
 若為0,桌布將以原始尺寸顯示在桌面中央
 若為1,桌布將填滿桌面
 若為2,將桌布放大的畫面大小,圖像有可能失真
WallPaperOriginX如果WallPaperStyle為0,則這表示圖像左上角X軸坐標(biāo)
WallPaperOriginY如果WallPaperStyle為0,則這表示圖像左上角Y軸坐標(biāo)

  注意:

  其實(shí),上表還漏了TileWallpaper鍵,這個設(shè)定值的優(yōu)先級最高,即當(dāng)TileWallpaper這個值為1時,不管其它參數(shù)為何值,都會將桌布填滿桌面,為了簡化程序,一般將其設(shè)置為0,然后在根據(jù)WallPaperStyle來設(shè)置桌布樣式,這是比較明智的做法。

  在了解了與桌布相關(guān)的注冊表的設(shè)置情況后,那我們就進(jìn)入具體的桌布設(shè)置吧!

    #include 〈Registry.hpp〉

    //先在注冊表里添好桌布樣式,在設(shè)置桌布

    TRegistry *Registry = new TRegistry;
    try
    {
     Registry-〉OpenKey(“Control PanelDesktop”,false); 
     Registry-〉WriteString("TileWallpaper","0");
     //設(shè)置桌布樣式

     Registry-〉WriteString("WallpaperStyle",wallStyle);
    }
    __finally
    {
     delete Registry;
    }

    }

    //設(shè)置桌布

    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,FileName.c_str(),SPIF_UPDATEINIFILE |             SPIF_SENDWININICHANGE);

  在此,我們已經(jīng)解決了最為關(guān)鍵的問題,剩下的關(guān)于設(shè)置定時器那就簡單了,只需用一個定時器組件即可完成.

  代碼如下:

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    if (ListBox1-〉Items-〉Count〈=0)
    {
    return ;
    }

    if (index〉=ListBox1-〉Items-〉Count)
    {
    index=0;
    }

    //如果是JPG格式就將其轉(zhuǎn)換為BMP格式,將其存到臨時文件夾中

    if(UpperCase(ListBox1-〉Items-〉Strings[index]).Pos(".JPG")||
    UpperCase(ListBox1-〉Items-〉Strings[index]).Pos(".JPEG"))
    {
    AnsiString fileName=ExtractFileName(ListBox1-〉Items-〉Strings[index]);
    int len=fileName.LastDelimiter(".");

    fileName=fileName.SubString(0,len-1)+".bmp";

    unsigned int *size=new unsigned int(256);

    char * buffer=new char[256];

    GetTempPath(*size,buffer);

    fileName=AnsiString(buffer)+fileName;

    JPEGToBMP(ListBox1-〉Items-〉Strings[index],fileName);

    //設(shè)置桌布

    SystemParametersInfo(SPI_SETDESKWALLPAPER,0,ListBox1-〉Items-〉Strings[index].c_str(),
     SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

    }

    else

    {

    //設(shè)置桌布

    SystemParametersInfo(SPI_SETDESKWALLPAPER,0,ListBox1-〉Items-〉Strings[index].c_str(),
     SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

    }

    //重建系統(tǒng)緩存

    RebuildIconCache();

    index++;

    }

  就這樣,我們就完成了桌布自動更換的功能,是不是很簡單,不過由于它受限于BMP位圖格式,這一點(diǎn)總是使得桌布的愛好者十分苦惱.我們能不能讓它支持其它格式的圖形文件呢?當(dāng)然可以,原理是這樣的,在設(shè)置桌布之前,現(xiàn)將其它格式的文件轉(zhuǎn)換為位圖,在用SystemParametersInfo函數(shù)設(shè)置桌布即可搞定.

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 关岭| 吉隆县| 湖口县| 瑞金市| 遂宁市| 崇礼县| 巴林左旗| 乌鲁木齐市| 蒙自县| 耿马| 隆林| 咸宁市| 白玉县| 五指山市| 邛崃市| 明溪县| 门头沟区| 巴青县| 隆回县| 满洲里市| 东乡族自治县| 固始县| 土默特左旗| 炎陵县| 军事| 汕头市| 沙坪坝区| 元氏县| 潜山县| 江陵县| 梨树县| 武义县| 南宁市| 宁津县| 汨罗市| 九江市| 宜春市| 讷河市| 嘉定区| 房山区| 东方市|