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