• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB實現窗口圖標最小化到通知欄

    發布: 2007-5-25 09:19 | 作者: 未知 | 來源: 不詳 | 查看: 37次 | 進入軟件測試論壇討論

    領測軟件測試網   只要我們能截獲最小化這個事件發送給窗口的消息,然后換成我們自定義的過程,問題就解決了。大家仔細想一想,當按下最小化按紐時會引發什么事件?最小化時窗口大小會發生變化會引發Form1.Resize事件,我們只要在Form1.Resize事件里用Form1.Visible = False使窗口消失,然后將窗口圖標顯示到通知欄即可達到我們想要的效果。

      怎樣判斷發生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

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>