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