(一)閃爍程序的標(biāo)題欄
在某些專(zhuān)業(yè)的應(yīng)用程序中,當(dāng)程序需要提醒用戶(hù)或要引起用戶(hù)的注意時(shí),就不停地閃爍程序的標(biāo)題欄。要實(shí)現(xiàn)這個(gè)功能,只需要一個(gè)Timer組件和使用一個(gè)API函數(shù)--FlashWindow。
使用API函數(shù)FlashWindow可以閃爍顯示指定窗口,讓窗口在活動(dòng)與非活動(dòng)的狀態(tài)之間切換,它有兩個(gè)參數(shù):hwnd和bInvert,頭文件為“winuser.h”。其中,參數(shù)hwnd為要閃爍的窗口句柄,參數(shù)bInvert是一個(gè)bool變量,設(shè)為true時(shí),程序窗口標(biāo)題欄從活動(dòng)切換到非活動(dòng)狀態(tài)、或反向切換,當(dāng)設(shè)為false時(shí),窗口標(biāo)題欄還原為最初的狀態(tài)。如果配合一個(gè)時(shí)間組件(Timer組件),以一定的時(shí)間間隔執(zhí)行語(yǔ)句:
FlashWindow( Form1-$#@62;Handle,true);
程序窗口的標(biāo)題欄就在活動(dòng)、非活動(dòng)的狀態(tài)之間不停地切換。若把hwnd指定成為應(yīng)用程序的句柄( Application-$#@62;Handel),將會(huì)閃爍程序在任務(wù)欄上的標(biāo)題欄。
下面就讓我們來(lái)做一個(gè)閃爍窗口標(biāo)題欄和任務(wù)欄上標(biāo)題欄的程序。
首先,在Form1中添加三個(gè)按鈕Button1、Button2和Button3,把它們的屬性分別為“閃爍窗口標(biāo)題欄”、“閃爍任務(wù)標(biāo)題欄”和“停止閃爍”,再加入兩個(gè)時(shí)間組件Timer1和Timer2,將兩個(gè)Timer組件的Enabled屬性都設(shè)為false,將Interval屬性都設(shè)為為500(即半秒),改變這個(gè)屬性的值可以修改閃爍的頻率。
然后,雙擊Timer1,在OnTimer事件中加入:
FlashWindow( Form1-$#@62;Handle,true);
雙擊Timer2,在OnTimer事件中加入:
FlashWindow( Application-$#@62;Handel,true);
雙擊Button1,在Button1的OnClick事件中加入:
Timer1-$#@62;Enabled=true;
雙擊Button2,在Button2的OnClick事件中加入:
Timer2-$#@62;Enabled=true;
最后,雙擊Button3,在Button3的OnClick事件中加入:
Timer1-$#@62;Enabled=false;
Timer2-$#@62;Enabled=false;
FlashWindow( Form1-$#@62;Handle,false);
FlashWindow( Application-$#@62;Handel,false);
這樣,一個(gè)簡(jiǎn)單的例子就完成了。按F9編譯運(yùn)行程序,你就可閃爍窗口標(biāo)題欄或是閃爍任務(wù)欄上? 題欄了。
(二)拖動(dòng)無(wú)標(biāo)題窗體
現(xiàn)在的Windows應(yīng)用程序,大都使用了圖形化的界面、不規(guī)則窗口技術(shù),使得程序界面更加漂亮了。但是,使用界面一般要先把窗體的標(biāo)題欄去掉(在BCB中,將窗體的BorderStyle屬性設(shè)為bsNone,就可以把窗體的標(biāo)題欄去掉),這樣就不能使用原來(lái)的標(biāo)題欄了,出現(xiàn)了窗口不能移動(dòng)的問(wèn)題。沒(méi)有標(biāo)題欄怎樣用鼠標(biāo)拖動(dòng)窗體呢?我們可以使用Windows的API函數(shù)SendMessage來(lái)解決這個(gè)問(wèn)題。
首先,新建一個(gè)工程,把窗體的BorderStyle屬性設(shè)為bsNone去掉窗體的標(biāo)題欄,按F12鍵切換到代碼編輯窗口,在頭部加入包含頭文件"winuser.h"的代碼:
#include $#@60;winuser.h$#@62;
然后,在窗體的 OnMouseDown 事件中加入下面的代碼:
if(Button == mbLeft)//判斷是否按了鼠標(biāo)左鍵
{
ReleaseCapture();//釋放鼠標(biāo)操作
SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
這樣,用鼠標(biāo)左鍵點(diǎn)住窗口拖動(dòng),就可以實(shí)現(xiàn)拖動(dòng)沒(méi)有標(biāo)題的窗口了。也可以在窗體上添加組件,然后在該組件的 OnMouseDown 事件中加入上面的代碼,這樣也可以點(diǎn)住這個(gè)組件拖動(dòng)窗口。你還可以把SendMessage函數(shù)的第一個(gè)參數(shù)修改為這個(gè)組件的句柄,如:往窗體添加一個(gè)Button組件,在它的 OnMouseDown 事件中加入上面的代碼,其中把SendMessage那行語(yǔ)句改為:
SendMessage( Button1-$#@62;Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
這樣就可以在程序運(yùn)行時(shí),用鼠標(biāo)在窗口的范圍內(nèi)移動(dòng)Button1了。
(三)隱藏程序在任務(wù)欄的圖標(biāo)
使用API函數(shù)ShowWindow可以隱藏一個(gè)程序在任務(wù)欄的圖標(biāo),它被包含在頭文件“winuser.h”里面。
1、隱藏任務(wù)欄圖標(biāo)的代碼就是:
ShowWindow( Application-$#@62;Handle, SW_HIDE);
2、要重新顯示的時(shí)候就使用:
ShowWindow( Application-$#@62;Handle, SW_SHOW);
但是,如果將程序最小化后,在任務(wù)欄的圖標(biāo)就會(huì)重新出現(xiàn)。若要在程序還原最小化后,程序在任務(wù)欄的圖標(biāo)重新被隱藏起來(lái),可以在窗體的OnPaint事件中加入隱藏程序在任務(wù)欄的圖標(biāo)的代碼,這樣,程序只有在最小化時(shí)任務(wù)欄才會(huì)出現(xiàn)圖標(biāo),當(dāng)程序還原最小化時(shí)圖標(biāo)又會(huì)重新被隱藏起來(lái)。
(四)重啟、關(guān)閉Windows
當(dāng)用戶(hù)修改了Windows里面的一些設(shè)置,Windows經(jīng)常會(huì)提問(wèn)是否要重新啟動(dòng)計(jì)算機(jī),當(dāng)用戶(hù)點(diǎn)Yes的時(shí)候,計(jì)算機(jī)將會(huì)自動(dòng)重啟。這個(gè)就是API函數(shù)ExitWindowsEx的一個(gè)典型的應(yīng)用。
ExitWindowsEx,顧名思義就是退出Windows的函數(shù),它有兩個(gè)參數(shù),第一個(gè)是退出Windows的選項(xiàng),常用的有:EWX_REBOOT(重新啟動(dòng)計(jì)算機(jī)),EWX_SHUTDOWN(關(guān)閉計(jì)算機(jī)),EWX_LOGOFF(注銷(xiāo)當(dāng)前用戶(hù)),第二個(gè)參數(shù)系統(tǒng)保留沒(méi)有使用,可設(shè)為0。
在自編的程序中(如:注冊(cè)表修改程序),當(dāng)用戶(hù)修改了某項(xiàng)設(shè)置需要重新啟動(dòng)計(jì)算機(jī)的時(shí)候,就要使用EWX_REBOOT選項(xiàng)重啟計(jì)算機(jī)。如:
ExitWindowsEx(EWX_REBOOT,0);
使用WX_SHUTDOWN選項(xiàng),可以實(shí)現(xiàn)關(guān)機(jī)。如:
ExitWindowsEx(EWX_SHUTDOWN,0);
當(dāng)需要注銷(xiāo)的時(shí)候,就使用EWX_LOGOFF選項(xiàng)。如:
ExitWindowsEx(EWX_LOGOFF,0);
審核編輯黃宇
-
API
+關(guān)注
關(guān)注
2文章
1461瀏覽量
61489
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論