摘要
在你的應用程序中,你可能會希望將應用程序的標題欄進行閃動,以提醒用戶進行某種操作,本文介紹了如何使一個窗口的標題欄進行閃動。
閃動標題欄
閃動一個窗口的標題欄意味著改變它的標題欄的外觀,例如它從活動變為不活動,或是從不活動變為活動等等。只要你能在VisualBasic中得到窗口的句柄,你就可以使用Windows應用程序編程接口(API)函數來使該窗口的標題欄進行閃動。函數FlashWindows可以被用使一個特定的窗口閃動一次。要使用該函數,需要將如下的聲明語句包含在你的窗體的通用聲明部分中:
#IfWin32Then
DeclareFunctionFlashWindowLib"user32"(ByValhwndAsLong,ByValbInvertAsLong)AsLong
#Else
DeclareFunctionFlashWindowLib"User"(ByValhwndAsInteger,ByValbInvertAsInteger)AsInteger
#EndIf
該函數需要2個參數,第一個參數是要閃動標題欄的窗口的句柄,第二個參數用於指定是設置窗口的閃動狀態,還是恢復其原始狀態。如果該bInvert參數非0,則表明窗口的標題欄被閃動,如果該參數為0,則表明窗口的標題欄被恢復為原始狀態。該函數所返回的值用於指定調用該函數前窗口的狀態,如果該返回值非0,則表明窗口在調用該函數之前是活動的,否則,如果返回值為0,則表明調用函數前窗口是非活動的。當使用該FlashWindow函數時,一個較好的方法是將標題欄閃動的頻率設置為同脫字符(也即閃動的光標)相同,脫字符的閃動頻率可以通過調用函數GetCaretBlinkTime來獲得。要使用該函數,需要將如下的聲明語句包含在你的窗體的通用聲明部分中:
#IfWin32Then
DeclareFunctionGetCaretBlinkTimeLib"user32"()AsLong
#Else
DeclareFunctionGetCaretBlinkTimeLib"User"()AsInteger
#EndIf
該函數返回用毫秒值表示的時間。
樣例程序
1.在VisualBasic中開始一個新的工程,采用缺省的方法建立Form1。
2.在Form1上添加一個定時器控件,采用缺省的方法建立Timer1。
3.將如下的代碼添加到Form1的Form_GotFocus事件中:
PrivateSubForm_GotFocus()
Timer1.Enabled=False
EndSub
4.將如下的代碼添加到Form1的Form_Load事件中:
PrivateSubForm_Load()
Timer1.Interval=GetCaretBlinkTime()
Form2.Show
EndSub
5.將如下的代碼添加到Timer1的Timer1_Timer事件中:
PrivateSubTimer1_Timer()
Success=FlashWindow(Form1.hwnd,1)
EndSub
6.添加第二個窗體,采用缺省的方法建立Form2。
7.將如下的代碼添加到Form2的單擊事件中:
PrivateSubForm_Click()
Form1.Timer1.Enabled=True
EndSub
8.添加一個新的模塊,采用缺省的方法建立Module1.Bas。將如下的代碼添加到該模塊的通用聲明部分中:
#IfWin32Then
DeclareFunctionFlashWindowLib"user32"(_
ByValhwndAsLong,_
ByValbInvertAsLong)AsLong
DeclareFunctionGetCaretBlinkTimeLib"user32"()AsLong
DimSuccessAsLong
#Else
DeclareFunctionFlashWindowLib"User"(_
ByValhwndAsInteger,_
ByValbInvertAsInteger)AsInteger
DeclareFunctionGetCaretBlinkTimeLib"User"()AsInteger
DimSuccessAsInteger
#EndIf
通過單擊F5鍵來運行該樣例程序,單擊Form2窗體,這時Form1窗體將處於非活動方式,其標題欄將會不斷閃爍。單擊Form1使它它變為活動方式,則窗體的標題欄將不再閃爍->