日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#制作简易屏保(转)

發布時間:2023/12/29 C# 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#制作简易屏保(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#制作簡易屏保[原創]

原始網址: http://www.cnblogs.com/drizzlecrj/archive/2006/10/06/522182.html

2006-10-06 16:25 by 農夫三拳, 4550 閱讀, 6 評論, 收藏, 編輯

下載源代碼:ScreenSaver.rar
初學C#的時候就曾想過寫屏幕保護,當時覺得很深奧,摸不著頭緒,就放棄了。今日又重新拾起,突然覺得也就是那么一回事,知道了就很簡單了。好的,下面就介紹一下如何利用C#制作屏幕保護。
打開Visual Studio.net2005(其他版本也差不多),建立一個windows項目。這次的屏保是模仿Windows XP自帶的一個屏幕保護。

把窗口的屬性設置一下:
1.首先把 WindowState 設置為 FormWindowState.Maximized 這樣窗口就可以在打開之后呈現最大化的狀態。
2.把TopMost 設置為true,這樣使得窗口處于最頂層,就是所謂的“永遠在前”,相信用過千千靜聽,金山詞霸等軟件的朋友應該熟悉。
3.把FormBorderStyle 設置為FormBorderStyle.None ,這樣窗口就沒有邊框,即沒有了標題欄,周圍的一圈邊框。也就省去了一個個去掉MaximizeBox ,MinimizeBox了。
4.把BackColor設置為Color.Black, 這樣窗口背景色就變成黑色了
5.ShowInTaskBar 設置為false,(這個步驟可以省去,本身最大化就看不到任務欄了)
其他的屬性修改都是多余了,當然把name等等類似改改也行,總之,上面5個(嚴格的說4個)弄好了,UI方面就設計完畢了。


下面拖動一個timer控件進來,將其Enabled屬性設置為true,Interval設置為10000(因為以milliseconds為單位,所以這里設置為10,000,也就是10s)。
加timer控件是為了每隔一定的事件觸發一個事件。因此給timer加一個事件,點擊Solution Explorer 上面的閃電圖標,添加唯一的一個Tick事件。
下面就開始設計算法了,其實也是再簡單不過了,隨機產生一個點,然后再該處繪制預先準備好的圖片。(如果為了好看點,可以設置坐標之間的關系)

????????private?readonly?int?screenWidth;
????????private?readonly?int?screenHeight;
????????private?Bitmap?bitmap?=?new?Bitmap("ms.bmp");
????????private?Random?random?=?new?Random();
????????private?int?x?=?0;
????????private?int?y?=?0;


增加若干成員變量, 挺有self-documenting的味道,我就不過多解釋了,前兩個是標志屏幕的寬度和高度,
然后是一個位圖對象,存儲預先準備的圖片,這里是一張bitmap。random是一個隨機類對象,用來產生隨機點的。再下面分別是產生的隨機點的x,y坐標。
?構造函數內添加

?

Rectangle?rect?=?Screen.PrimaryScreen.Bounds;
screenWidth?=?rect.Width;
screenHeight?=?rect.Height;


?第一句話是用來獲得整個顯示器的邊界范圍。然后分別把寬度和高度賦值給成員變量。
?注:Screen類提供了一些與顯示器相關的屬性,感興趣的朋友可以參閱MSDN
?下面填補Tick事件
?

private?void?timer1_Tick(object?sender,?EventArgs?e)
????????{
????????????x?=?random.Next(screenWidth);
????????????y?=?random.Next(screenHeight);
????????????if?(x?+?bitmap.Width?>?screenWidth)
????????????{
????????????????x?=?screenWidth?-?bitmap.Width;
????????????}
????????????if?(y?+?bitmap.Height?>?screenHeight)
????????????{
????????????????y?=?screenHeight?-?bitmap.Height;
????????????}
????????????this.Invalidate();
????????}

?
?上面是獲取一個x,y坐標分別不大于顯示器的寬度和高度的點。為了美觀一點,判斷圖片是否超過屏幕邊界,對x,y進行了一些處理, 不是很難,相信大家都能看懂。最后刷新屏幕,調用paint事件。
?我想您一定知道了,對, 在Form的paint事件里面有了一句畫圖的語句,回答正確!

?e.Graphics.DrawImage(bitmap,?x,?y,?bitmap.Width,bitmap.Height);


?注: 我在編寫程序測試的過程中,發現了一個非常細微也很重要的地方。也正是因為它,才引起了我寫這篇文章的欲望。 要指出的是: Graphics類下面有一系列的DrawImage重載函數。
?特別關注這兩個(我僅僅來出來舉例,其他相應的大家自會明白)

?public?void?DrawImage(?Image?image,?Point?point);


?和

?public?void?DrawImage(Image?image,int?x,int?y,int?width,int?height);


?
?前者是在指定點繪制物理大小的圖片,而后者是在指定點繪制指定縮放大小的圖片。
?兩者有什么不同呢? 給大家看一段話應該就懂了!
?
?Image 對象存儲像素寬度值及水平分辨率值(每英寸點數)。圖像的物理寬度(以英寸為單位)等于像素寬度除以水平分辨率。例如,像素寬度為 216、水平分辨率為 72 點/英寸的圖像的物理寬度為 3 英寸。此說明同樣適用于像素高度和物理高度。
?
?此方法使用圖像的物理大小繪制圖像,因此無論顯示設備的分辨率(每英寸點數)是多少,圖像大小(以英寸為單位)都是正確的。例如,假定圖像的像素寬度為 216,水平分辨率為 72 點/英寸。如果調用此方法在分辨率為 96 點/英寸的設備上繪制該圖像,則所呈現圖像的像素寬度是 (216/72)*96 = 288。
?
?哈哈, 也就是說前者在用圖片的物理大小,后者使用指定大小。物理大小在不同的水平分辨率的顯示器上顯示的始終是圖片的真實大小。(注意,bitmap 的width和height返回的大小都是以 pixel(像素)為單位的)。疑云頓時解開了!
?
?最后添加一個程序退出的操作,這里我使用的是鍵盤按下或者鼠標焦點變換。
?這個不難,略過。
?
?到此為止,把程序執行一下就可以看到預期的效果了。最后把bin/debug或者
?bin/release下的可執行程序后綴改成scr,并拷貝到系統盤Windows的system32下(圖片也拷貝進去哦!)
?這樣通過桌面屬性的屏幕保護程序設置一下就可以投入使用了,是不是很炫呢!趕緊試試吧!
?
?
?
?
?
?程序在 Windows XP SP2 + Visual Studio.net 2005 下編譯通過。
?

后記:
1.筆者發現,在Visual Studio.net2005下面建C#項目的時候有一項就是。是在屏保里面顯示Rss內容的。待我研究一陣子再向大家匯報吧。
2.關于圖片,拷貝到system32下委實不方便,我們可以使用內嵌資源編譯進exe文件里面。下篇文章再介紹了,呵呵,睡覺去咯。

轉載于:https://www.cnblogs.com/yasepix/p/4812262.html

總結

以上是生活随笔為你收集整理的C#制作简易屏保(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。