如何用C 做乙個類似於桌面外掛程式的程式

2021-04-07 02:18:22 字數 2493 閱讀 7655

最近看到有人問如何做乙個「桌面天氣秀」類似的軟體,開始我以為做這個東西很複雜,因為覺得至少要傳遞

message

給desktop

。但事實上,一試之後發現做這個程式竟然很簡單。

首先,需要設定窗體樣式,這裡面要設定的有:l設定

formborderstyle

為none;l

設定topmost

為false;l

設定showintaskbar

為false;l

為了能穿透桌面,要把

backcolor

設為white

,在把transparentkey

設為white

;這樣,窗體的基本設定就完成了,為了顯示要畫的內容,則需要在窗體的

paint

事件中去做,我這裡所畫的內容是顯示當前月的所有天,相當於乙個小日曆。

private

void draw( graphics g )

";

string strdraw = string.format( format_string,

"sun".padleft( blank_space_num, ' ' ),

"mon".padleft( blank_space_num, ' ' ),

"tue".padleft( blank_space_num, ' ' ),

"wed".padleft( blank_space_num, ' ' ),

"thu".padleft( blank_space_num, ' ' ),

"fri".padleft( blank_space_num, ' ' ),

"sat".padleft( blank_space_num, ' ' ) );

font myfont = new font( "

宋體", 11, fontstyle.bold );

stringformat sfdraw = new stringformat();

sfdraw.alignment = stringalignment.near;

sfdraw.linealignment = stringalignment.far;

brush brdraw = new solidbrush( color.wheat );

g.drawstring( strdraw, myfont, brdraw, recregion, sfdraw );

datetime dtfirstdate = datetime.now.adddays( 1 - datetime.now.day );

int nstartindex = (int)(dtfirstdate.dayofweek);

nstartindex++;

timespan tsdays = dtfirstdate.addmonths( 1 ) - dtfirstdate;

// draw every day in this month

strdraw = "";

int i = 0;

for( ; i < tsdays.days; i++ )

}

if( strdraw != "" )

}

private

void frmsprite_paint(object sender, system.windows.forms.painteventargs e)

為了窗體能方便的退出,我加了乙個

notifyicon

和contextmenu

來處理,具體如下。

private

system.windows.forms.notifyicon ntfsprite;

private

system.windows.forms.contextmenu mnucontext;

private

system.windows.forms.menuitem mnuexit;

private

void mnuexit_click(object sender, system.eventargs e)

本來以為自己的窗體放在

desktop

之前,會影響窗體下

desktop

的某些操作,但事實,這一點根本不用擔心,因為

.net

框架已經替你做了,因此你不用再呼叫

api來傳遞訊息。

如果想要所顯示的窗體能夠隨意拖動,這可以參看我另外一篇文章:

以上的**只是做了簡單的測試,大家可以在我的基礎上做擴充套件,例如呼叫

api來對當前程序作一些隱藏,設定窗體的起始位置,以及一些介面操作之類,放到啟動選單,這些都是可以完成的,我這裡就不羅嗦了。

愚翁專欄 如何用C 做乙個類似於桌面外掛程式的程式

如何用c 做乙個類似於桌面外掛程式的程式 最近看到有人問如何做乙個 桌面天氣秀 類似的軟體,開始我以為做這個東西很複雜,因為覺得至少要傳遞 message 給desktop 但事實上,一試之後發現做這個程式竟然很簡單。首先,需要設定窗體樣式,這裡面要設定的有 l設定 formborderstyle ...

c 類似於千千靜聽的桌面停靠程式

c 類似於千千靜聽的桌面停靠程式 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq us...

c 類似於千千靜聽的桌面停靠程式收藏

c 類似於千千靜聽的桌面停靠程式 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq us...