當前位置:才華齋>IT認證>ACCP>

如何用C#製作氣泡螢幕保護

ACCP 閱讀(1.48W)

氣泡螢幕保護製作要點:1 視窗要全屏置頂 2 模擬氣泡的滾動和粘滯效果 3 支援快捷鍵ESC退出大致就是這3個要點了,其他還有一些細節我們在程式中根據需要再看,OK,開工!

如何用C#製作氣泡螢幕保護

首先是全屏置頂,因為是螢幕保護嘛,這個簡單,在窗體的屬性設定裡把FormBorderStyle設定為none表示無邊框,把ShowInTaskbar設定為false表示不在工作列出現,最後一個把WindowState設定為Maximized表示最大化即可,當然可以設定TopMost為true讓視窗置頂,不過這個不是絕對的,如果有其他視窗也使用TopMost的話會讓我們失去焦點,所以我們要註冊一個快捷鍵讓程式可以退出!

模擬氣泡我們可以用Graphics類中的DrawEllipse方法來畫一個圓,當然這個圓我們可以指定不同的顏色和大小,這裡重點講一下怎麼模擬粘滯效果!

所謂粘滯效果相信大家到知道,膠體大家都見過吧?就是類似膠體那種有彈性並且可以在改變形狀後回覆原型的那種效果,當然這裡要想模擬這個效果只能說是稍微類似,DrawEllipse方法中最後兩個引數表示圓的大小,我們可以在這裡做文章,由於迴圈的速度很快,我們只要動態改變圓的大小就可以產生類似粘滯的效果,當然這個改變大小的引數不能太大,否則就無效了!

我們在onpaint事件中寫入如下程式碼來繪製一些圓:

om ra = new Random(); //初始化隨機數

02. bmp = new Bitmap(h,ht, hics);

03. Graphics bmpGraphics = Graphics.FromImage(bmp);

04. // 繪製圓形

05. for (int i=1;i<=13;i++)//這裡繪製13個圓形

06. {

07. bEllipse(new Pen(Name(colours[i]),2),//根據事先定義好的顏色繪製不同顏色的圓

08. ballarray[i, 1], ballarray[i, 2], 70+(1, 10), 70+(1, 10));

09. //注意上面的最後兩個引數利用隨機數產生粘滯效果

10. }

11. e.Graphics.DrawImageUnscaled(bmp, 0, 0);

12. bose();

13. bose();//這裡是非託管的垃圾回收機制,避免產生記憶體溢位

這樣,通過以上程式碼就可以繪製出一些不同顏色的具有粘滯效果的'圓來模擬氣泡

下面是註冊系統熱鍵,有個API函式RegisterHotKey可以完成系統快捷鍵的註冊,使用他之前我們要先引用一個系統的DLL檔案:,然後對這個RegisterHotKey函式進行一下宣告:

1.[DllImport("")]//引用

ic static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk); //宣告函式原型

由於引用了一個DLL檔案,我們不要忘了在檔案頭加入DLLImport的類宣告using ropServices;然後在Form1的建構函式中來註冊一個系統熱鍵,這裡我們註冊ESC:RegisterHotKey(le, 247696411, 0, (UInt32)pe); 通過以上步驟,我們就可以註冊一個或多個系統熱鍵,但是,註冊系統熱鍵後我們還不能立即使用,因為我們在程式中還無法對這個訊息進行響應,我們過載一下預設的WndProc過程來響應我們的熱鍵訊息:

ected override void WndProc(ref Message m)//注意是保護型別的過程

02. {

03. const int WM_HOTKEY = 0x0312;

04. }

05. if ( == WM_HOTKEY & & t32() == 247696411) //判斷熱鍵訊息是不是我們設定的

06. {

07. ();//如果訊息等於我們的熱鍵訊息,程式退出

08. }

09. roc(ref m);//其他訊息返回做預設處理

好了,通過以上一些步驟,我們就基本完成了這個螢幕保護程式的要點設計,其他的詳細過程可以參考原始碼,程式執行的時候背景是透明的,這個也不難實現

Color = Argb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));

sparencyKey = Argb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));

TransparencyKey可以讓窗體的某個顏色透明顯示,我們只要把窗體的顏色和TransparencyKey的顏色設定一致就可以了,這裡我設定的是粉紅,注意最好設定的顏色是窗體所沒有的,否則一旦匹配將會以透明顯示!