怎樣判斷發生Resize事件時窗口是最小化狀態呢?VB里沒有現成的做法,我們可以用非富的API函數。API函數庫里有一個函數IsIconic(ByVal hwnd As Long),它就是專門判斷窗口是否已最小化的。這樣當Form產生Resize事件時,用IsIconic函數判斷一下窗口是否為最小化狀態,就可知道是否用戶按了最小化按鈕。
最關鍵的一步就是將圖標顯示在通知欄里,VB里沒有現成的做法,我們還得用API函數。API函數庫里有一個函數Shell_NotifyIcon(ByVal dwMessage As Long, lpData As NOTIFYICONDATA),是專門操作(包括添加、修改、刪除)通知欄里圖標的。
點一下通知欄圖標,會出現一些諸如"退出"、"顯示窗口"的彈出菜單,怎樣實現彈出菜單呢?這個很容易實現,因為點擊圖標會觸發圖標所在窗口的MouseDown事件,我們把彈出菜單觸發過程寫入Form1_MouseDown事件即可。具體例程如下:
第一步、為了增強程序的可移植性,我們新建一個模塊,取名為:NoticeIcon,在此模塊中定義一些常量、自定義類型、所需的API函數說明及操作通知欄圖標的三個自定義函數(添加、修改、刪除),模塊NoticeIcon具體代碼如下所示:
Public Const DefaultIconIndex = 1 圖標缺省索引 Public Const WM_LBUTTONDOWN = &H201 按鼠標左鍵 Public Const WM_RBUTTONDOWN = &H204 按鼠標右鍵 Public Const NIM_ADD = 0 添加圖標 Public Const NIM_MODIFY = 1 修改圖標 Public Const NIM_DELETE = 2 刪除圖標 Public Const NIF_MESSAGE = 1 message 有效 Public Const NIF_ICON = 2 圖標操作(添加、修改、刪除)有效 Public Const NIF_TIP = 4 ToolTip(提示)有效 API函數聲明 圖標操作 Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long 判斷窗口是否最小化 Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long 設置窗口位置和狀態(position)的功能 Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 定義類型 通知欄圖標狀態 Public Type NOTIFYICONDATA cbSize As Long hwnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 End Type 函數定義 添加圖標至通知欄 Public Function Icon_Add(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long 參數說明:iHwnd:窗口句柄,sTips:當鼠標移到通知欄圖標上時顯示的提示內容 hIcon:圖標句柄,IconID:圖標Id號 Dim IconVa As NOTIFYICONDATA With IconVa .hwnd = iHwnd .szTip = sTips + Chr$(0) .hIcon = hIcon .uID = IconID .uCallbackMessage = WM_LBUTTONDOWN .cbSize = Len(IconVa) .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP Icon_Add = Shell_NotifyIcon(NIM_ADD, IconVa) End With End Function 刪除通知欄圖標(參數說明同Icon_Add) Function Icon_Del(iHwnd As Long, lIndex As Long) As Long Dim IconVa As NOTIFYICONDATA Dim L As Long With IconVa .hwnd = iHwnd .uID = lIndex .cbSize = Len(IconVa) End With Icon_Del = Shell_NotifyIcon(NIM_DELETE, IconVa) End Function 修改通知欄圖標(參數說明同Icon_Add) Public Function Icon_Modify(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long Dim IconVa As NOTIFYICONDATA With IconVa .hwnd = iHwnd .szTip = sTips + Chr$(0) .hIcon = hIcon .uID = IconID .uCallbackMessage = WM_LBUTTONDOWN .cbSize = Len(IconVa) .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP Icon_Modify = Shell_NotifyIcon(NIM_MODIFY, IconVa) End With End Function |
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/
領測軟件測試網最新更新
關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月