电竞比分网-中国电竞赛事及体育赛事平台

分享

使用C#開發(fā)屏幕保護(hù)程序步驟

 昵稱10504424 2014-01-13

本文介紹使用C#制作屏幕保護(hù)的方法,這個(gè)屏幕保護(hù)就是仿效視窗系統(tǒng)自帶的字幕屏保。

的整個(gè)過程。

  一.本文中介紹的程序設(shè)計(jì)及運(yùn)行環(huán)境

  ?。?).微軟視窗2000 服務(wù)器版

  ?。?)..Net Framework SDK 正式版

  二.C#編寫字幕顯示屏保程序的關(guān)鍵步驟以及解決方法:

  (1).設(shè)定程序的窗體符合屏幕保護(hù)的要求:

  由于屏幕保護(hù)程序就是一個(gè)可執(zhí)行程序,所以在編寫屏幕保護(hù)程序的時(shí)候,首先按照可執(zhí)行程序來設(shè)計(jì)。但屏幕保護(hù)有自身的特點(diǎn)。譬如:屏幕保護(hù)都是充滿

整個(gè)屏幕的,并且沒有無邊。屏幕保護(hù)運(yùn)行的時(shí)候,不能顯示任務(wù)欄。在程序設(shè)計(jì)中實(shí)現(xiàn)這些特點(diǎn),關(guān)鍵就在于對(duì)窗體的某些屬性的設(shè)定上。下面是對(duì)窗體屬性的

設(shè)定,就可以滿足屏幕保護(hù)的要求,具體如下:

this.Name = "ScreenSaver" ;
//窗體運(yùn)行后無邊界
this.FormBorderStyle = FormBorderStyle.None ;
//程序運(yùn)行后不顯示在任務(wù)欄上
this.ShowInTaskbar = false ;
//窗體運(yùn)行后,最大化,充滿整個(gè)屏幕

 ?。?).使得字符在屏幕上不斷移動(dòng):

  實(shí)現(xiàn)字符在屏幕上像字符屏保一樣不斷移動(dòng),是通過一個(gè)定時(shí)器來完成的。不斷移動(dòng)的字符,其實(shí)就是一個(gè)Label組件。當(dāng)設(shè)定好Label組件要顯示的字符后,

也就設(shè)定了在屏幕上要移動(dòng)的字符。定時(shí)器每隔一段時(shí)間,都把Label組件的橫坐標(biāo)減去一個(gè)定值,這樣在定時(shí)器的驅(qū)動(dòng)下,Label組件的位置就變換了,帶來的視

覺效果,就是字符不斷移動(dòng)。http://www.cnblogs.com/roucheng/p/3515583.html

  當(dāng)Label組件的位置已經(jīng)移動(dòng)到屏幕的外面以后,這是就有把Label組件的橫坐標(biāo)回復(fù)到起始值(即:屏幕的最右邊),然后判斷Label組件的縱坐標(biāo)是否位于屏

幕的頂部,如果在頂部,則把縱坐標(biāo)的位置重置在中部;如果在中部,則重置在底部;如果在底部,則重置在頂部。經(jīng)過了這些判斷,字符不僅可以實(shí)現(xiàn)從右往左

移動(dòng),還可以變換字符進(jìn)入屏幕的位置。從而也豐富了屏幕保護(hù)的內(nèi)容。其實(shí)要實(shí)現(xiàn)這些判斷,首先還必須知道屏幕的工作區(qū)域,因?yàn)橹挥邢戎榔聊坏墓ぷ鲄^(qū)域

,在能夠?qū)崿F(xiàn)對(duì)Label組件的橫坐標(biāo)和縱坐標(biāo)的設(shè)定工作。下面就是實(shí)現(xiàn)此步驟地具體代碼:

//得到計(jì)算機(jī)屏幕的工作區(qū)域
Rectangle ssWorkArea = Screen.GetWorkingArea ( this ) ;
lblMarquee.Location = new Point ( ssWorkArea.Width - iDistance ,
lblMarquee.Location.Y ) ;
//顯示標(biāo)簽
lblMarquee.Visible = true ;
// 增加2個(gè)象素點(diǎn),你可以通過修改speed的值來改變標(biāo)簽的移動(dòng)速度
iDistance += speed ;
// 如果標(biāo)簽已經(jīng)走出屏幕,則把標(biāo)簽的位置重定位到屏幕的右邊
if ( lblMarquee.Location.X <= -( lblMarquee.Width ) )
{
//Reset the distance to 0.
iDistance = 0 ;
//判斷標(biāo)簽的位置是否在頂部,如果在,則重定位到中部
if ( lblMarquee.Location.Y == 0)
lblMarquee.Location = new Point ( lblMarquee.Location.X , ( ssWorkArea.Height / 2 ) ) ;
//判斷標(biāo)簽的位置是否在中部,如果在,則重定位到底部
else if ( lblMarquee.Location.Y == ssWorkArea.Height / 2 )
lblMarquee.Location = new Point ( lblMarquee.Location.X , ssWorkArea.Height - lblMarquee.Height ) ;
//重定位到頂部
else
lblMarquee.Location = new Point ( lblMarquee.Location.X , 0 ) ;
}

  (3).檢測(cè)鍵盤、鼠標(biāo)狀態(tài),確定退出屏幕保護(hù)程序:

程序中,判斷鼠標(biāo)是否移動(dòng)的思路是通過二個(gè)全局變量記錄下,程序剛剛運(yùn)行的時(shí)候的鼠標(biāo)的位置(即:X和Y),當(dāng)鼠標(biāo)移動(dòng)的時(shí)候,判斷移動(dòng)后的位置和記錄的

位置是否有出入,如果有出入,就關(guān)閉屏保。下面代碼功能就是檢測(cè)鼠標(biāo)移動(dòng),并結(jié)束屏幕保護(hù),具體如下:

// 把鼠標(biāo)剛剛開始移動(dòng)的位置給記錄下來
if ( ixStart == 0 && iyStart == 0 )
{
ixStart = e.X ;
iyStart = e.Y ;
return ;
}
//判斷自屏幕保護(hù)程序運(yùn)行后,鼠標(biāo)的位置是否變動(dòng)
else if ( e.X != ixStart || e.Y != iyStart )
{
Cursor .Show ( ) ;
timerSaver.Enabled = false ;
Application .Exit ( ) ;
};

 ?。?).對(duì)Windows對(duì)屏幕保護(hù)設(shè)定參數(shù)的響應(yīng):

  當(dāng)屏幕保護(hù)加入到Windows系統(tǒng)后,你就可以通過Windows系統(tǒng)來設(shè)定屏幕保護(hù)的屬性了,由于我們制作的這個(gè)屏幕保護(hù),沒有可供設(shè)置的選項(xiàng),但也要對(duì)

if (args [ 0 ].Substring ( 0 , 2 ).Equals ( "/c" ) )
{
MessageBox.Show("此屏幕保護(hù)沒有可供設(shè)置的選項(xiàng)!","用C#制造屏幕保護(hù)" ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}
else if ( args [ 0 ] == "/a" )
{
MessageBox.Show("此屏幕保護(hù)沒有可供設(shè)定口令的選項(xiàng)!","用C#制造屏幕保護(hù)" ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}

  三.總結(jié):

  由于屏幕保護(hù)都是Windows程序,所以編譯的時(shí)候,要產(chǎn)生Windows程序,編譯的命令如下:

    csc /t:winexe screen.cs

就完成了從編寫到配置的全部工作了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多