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