• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        在系統菜單上添加自定義菜單項

        在系統菜單上添加自定義菜單項

        更新時間:2022-05-07 文章作者:未知 信息來源:網絡 閱讀次數:

        作者:馬鞍山鋼鐵總公司職工大學 王加龍

        ---- 本文題目所說的系統菜單不是指應用程序系統的菜單,而是指當用戶用鼠標左鍵單擊應用程序窗體左上角的圖標時彈出的菜單。同樣,當用戶用鼠標右鍵單擊應用程序窗體的標題欄,或系統任務欄中的應用程序標題時,彈出的也是這個菜單。系統菜單與應用程序菜單不一樣,系統菜單不受應用程序控制,它是由Windows系統直接控制的。因此,在系統菜單上添加自定義菜單項,就顯得比較困難。以下便是本人利用VB實現在系統菜單上添加自定義菜單項的方法。

        ---- 首先需要知道一點是系統菜單的工作過程。當我們單擊系統菜單中某一項時,應用程序窗口會收到一條WM_SYSCOMMAND消息,該消息包含了系統菜單中所單擊那一項的標識符ID。此時,應用程序窗口的默認窗口函數會根據WM_SYSCOMMAND消息以及菜單標識符ID執行相應的操作,完成菜單命令。如果我們能攔截到達窗口的WM_SYSCOMMAND消息,并且識別出菜單的標識符ID,我們就能夠在系統菜單上添加自己的菜單項,并且執行指定的動作。下面的例子就是在系統菜單上添加一條分隔符和"關于…"菜單項。

        ---- 啟動Visual Basic,新建標準EXE工程,在工程中添加一標準模塊,名稱可以是默認的。在標準模塊的聲明部分加入下列代碼:

        '菜單API函數聲明
        Public Declare Function GetSystemMenu Lib "user32"
        (ByVal hwnd As Long, ByVal bRevert As Long) As Long
        Public Declare Function AppendMenu Lib "user32" Alias
        "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long,
        ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
        '菜單API函數常數聲明
        Public Const MF_BYCOMMAND = &H0&
        Public Const MF_SEPARATOR = &H800&
        Public Const MF_STRING = &H0&
        '有關窗口函數的API函數聲明
        Public Declare Function SetWindowLong Lib
        "user32" Alias "SetWindowLongA" (ByVal hwnd
        As Long, ByVal nIndex As Long, ByVal
        dwNewLong As Long) As Long
        Public Declare Function CallWindowProc Lib "user32"
        Alias "CallWindowProcA" (ByVal lpPrevWndFunc
        As Long, ByVal hwnd As Long, ByVal Msg As Long,
        ByVal wParam As Long, ByVal lParam As Long) As Long
        Public Declare Function DefWindowProc Lib
        "user32" Alias "DefWindowProcA" (ByVal
        hwnd As Long, ByVal wMsg As Long,
        ByVal wParam As Long, ByVal lParam As Long) As Long
        '消息
        Public Const GWL_WNDPROC = (-4)
        Public Const WM_NCLBUTTONDOWN = &HA1
        Public Const WM_NCRBUTTONDOWN = &HA4
        Public Const WM_USER = &H400
        Public Const WM_SYSCOMMAND = &H112
        Public Const HTSYSMENU = 3
        Public Const HTCAPTION = 2
        '自定義菜單項的標識號偏移量
        Public Const IDM_SEPARATOR = 1
        Public Const IDM_MYABOUT = 2
        '其他變量
        Dim sHwnd As Long
        Dim OldProc As Long

        接著可向標準模塊添加下面兩個過程:
        Public Sub AddMenu(frm As Form)
        '置換窗口函數過程

        sHwnd = frm.hwnd
        OldProc = SetWindowLong(frm.hwnd,
        GWL_WNDPROC, AddressOf AddCallBack)

        End Sub

        Public Sub Release()
        '釋放自定義窗口函數過程

        SetWindowLong sHwnd, GWL_WNDPROC, OldProc

        End Sub

        最后向標準模塊中添加一自定義窗口函數過程:
        Public Function AddCallBack(ByVal hwnd As Long,
        ByVal wMsg As Long, ByVal wParam As Long,
        ByVal lParam As Long) As Long
        Select Case wMsg
        Case WM_SYSCOMMAND '系統消息
        Select Case wParam '測試
        Case WM_USER + IDM_MYABOUT '
        "關于..."菜單項
        '此處可加入用戶需要自己處理
        "關于…"菜單項的代碼
        MsgBox "單擊了添加的菜單條目", vbOKOnly
        Case Else '其它菜單項交換系統處理
        AddCallBack = DefWindowProc(hwnd,
        wMsg, wParam, lParam)
        End Select
        Exit Function
        Case Else
        AddCallBack = CallWindowProc(OldProc,
        hwnd, wMsg, wParam, lParam)
        End Select

        End Function
        關閉標準模塊的代碼窗口,
        打開窗體的代碼窗口,
        在Form_Load()過程中加入下列代碼:
        '加載自定義窗口過程
        AddMenu Me
        '獲得系統菜單的句柄
        Dim hMenu As Long
        hMenu = GetSystemMenu(Me.hwnd, 0)
        '在系統菜單中添加自定義2條菜單項
        AppendMenu hMenu, MF_SEPARATOR
        Or MF_BYCOMMAND,
        IDM_SEPARATOR, vbNullString
        '分隔符
        AppendMenu hMenu, MF_BYCOMMAND
        Or MF_STRING,
        WM_USER + IDM_MYABOUT, "關于..."
        '
        "關于…"菜單項
        在Form_Unload過程中加入下列代碼:
        Release '釋放自定義窗口過程

        ---- 到此,代碼的輸入工作完成,接下來的是進行測試。單擊啟動按鈕或按F5,啟動工程,用鼠標單擊窗體左上角的圖標彈出系統菜單,看看是否如愿。千萬要注意的一點是,在結束工程時,一定要用窗體右上角的關閉按鈕或者系統菜單中的關閉菜單項,否則的話,會造成Visual Basic系統崩潰,出現非法操作的錯誤,所以在測試工程前,最好對工程進行保存。
        ---- 以上程序在Windows95,Visual Basic6.0環境下調試通過。 

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 国产四虎免费精品视频| 精品国产_亚洲人成在线| 一个人免费视频观看在线www| 亚洲av永久无码精品国产精品| 亚洲白嫩在线观看| 最近2022中文字幕免费视频| 亚洲国产精品尤物YW在线观看| 亚洲Av无码国产一区二区| 黄a大片av永久免费| MM1313亚洲精品无码久久| 日本黄色免费观看| 日本高清不卡中文字幕免费| 国产亚洲色视频在线| 永久免费AV无码网站国产| 久久夜色精品国产噜噜亚洲AV| 亚洲人成免费电影| 亚洲中文字幕久久久一区| 免费国产黄网站在线观看 | 亚洲国产电影av在线网址| 免费中文字幕视频| 国产AV无码专区亚洲Av| h视频在线免费看| 国产精品亚洲二区在线| 国产亚洲精品资源在线26u| 亚洲a无码综合a国产av中文| 亚洲色一色噜一噜噜噜| 99免费观看视频| 亚洲熟妇AV一区二区三区宅男| 亚洲成?v人片天堂网无码| 久久精品国产免费| 亚洲精品天堂成人片AV在线播放| 亚洲?V无码乱码国产精品| 亚洲 日韩 色 图网站| 夜色阁亚洲一区二区三区| 免费视频成人手机在线观看网址| 亚洲国产精品日韩在线观看| 国产精品视_精品国产免费| 色播在线永久免费视频网站| 亚洲资源最新版在线观看| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 国产精品免费观看调教网|