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

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

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

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

    使窗體右上角的X按鈕失效刪除系統菜單

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 16次 | 進入軟件測試論壇討論

    領測軟件測試網 內容簡介:

    刪除系統菜單Dim MHwd As Long
    MHwd = GetSystemMenu(Me.hwnd, False)
    MsgBox DeleteMenu(MHwd, &H0&, &H400)

    源代碼內容:

    窗體右上角的X按鈕通常用來關閉一個程序,這個小X按鈕實際上是和系統菜單的“關閉”菜單項關聯在一起的,什么?不知道什么是系統菜單,系統菜單是指我們點擊窗體左上角的小圖標時所彈出的菜單,其中好象有“恢復”、“移動”、“最大化”、“最小化”、“關閉”這么幾個按鈕。這個菜單用普通的方法是不能編輯和改變的,但是我們可以通過API函數GetSystemMenu來得到它的句柄,然后通過菜單相關的API函數就能改變它了,下面一起看看怎么做吧。

     為了學習方便,下面先給出源碼,并且已經作了詳細的中文注釋:

    程序說明:
    本例利用API函數GetSystemMenu得到系統菜單的句柄
    X按鈕是系統菜單的一菜單項,然后用RemoveMenu函數
    刪去這一菜單項,也就是使X按鈕失效了。
    -------------------------------------------
    VB聲明】

    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long


    【說明】
    取得指定窗口的系統菜單的句柄。在vb環境,“系統菜單”的正式名稱為“控制菜單”,即單擊窗口左上角的控制框時出現的菜單

    【返回值】
    Long,如執行成功,返回系統菜單的句柄;零意味著出錯。如bRevert設為TRUE,也會返回零(簡單的恢復原始的系統菜單)

    【備注】
    在vb里使用:系統菜單會向窗口發送一條WM_SYSCOMMAND消息,而不是WM_COMMAND消息

    【參數表】
    hwnd ----------- Long,窗口的句柄

    bRevert -------- Long,如設為TRUE,表示接收原始的系統菜單

    Private Declare Function GetSystemMenu Lib "user32" ( _
    ByVal hwnd As Integer, _
    ByVal bRevert As Integer _
    ) As Integer

    【VB聲明】

    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    【說明】
    刪除指定的菜單條目。如刪除的條目屬于一個彈出式菜單,那么這個函數不會同時刪除彈出式菜單。首先應該用GetSubMenu函數取得彈出式菜單的句柄,再在以后將其刪除

    【返回值】
    Long,非零表示成功,零表示失敗。會設置GetLastError

    【備注】
    強烈建議大家使用vb菜單的visible屬性從菜單中刪除條目,而不要用這個函數,否則會造成指定菜單中其他菜單條目的visible屬性對錯誤的菜單條目產生影響

    【參數表】
    hMenu ---------- Long,菜單的句柄

    nPosition ------ Long,欲改變的菜單條目的標識符。如在wFlags參數中指定了MF_BYCOMMAND,這個參數就代表欲改變的菜單條目的命令ID。如設置的是MF_BYPOSITION,這個參數就代表菜單條目在菜單中的位置(第一個條目的位置為零)

    wFlags --------- Long,常數MF_BYCOMMAND或MF_BYPOSITION,取決于nPosition參數


    Private Declare Function RemoveMenu Lib "user32" ( _
    ByVal hMenu As Integer, _
    ByVal nPosition As Integer, _
    ByVal wFlags As Integer _
    ) As Integer

    Private Sub Command1_Click()
    Unload Me
    End Sub

    Private Sub Form_Load()
    Dim R As Integer
    MyMenu = GetSystemMenu(Me.hwnd, 0)
    RemoveMenu MyMenu, &HF060, R
    End Sub


      程序中用到了兩個API函數GetSystemMenu、RemoveMenu,其中GetSystemMenu函數用來得到系統菜單的句柄,RemoveMenu用來刪除指定的菜單條目,我們先來看看這個函數的聲明和參數:

       Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

       Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    其中各GetSystemMenu參數的意義如下表:

    參數 意義
    hwnd Long 系統菜單所在窗口的句柄
    bRevert Long 如設為TRUE,表示恢復原始的系統菜單
    返回值 Long 如執行成功,返回系統菜單的句柄;零意味著出錯。如bRevert設為TRUE,也會返回零(簡單的恢復原始的系統菜單)

      而RemoveMenu參數的意義如下表:

    參數 意義
    hMenu Long 菜單的句柄
    nPosition Long 欲改變的菜單條目的標識符。如在wFlags參數中指定了MF_BYCOMMAND,這個參數就代表欲改變的菜單條目的命令ID。如設置的是MF_BYPOSITION,這個參數就代表菜單條目在菜單中的位置(第一個條目的位置為零)
    wFlags Long 常數MF_BYCOMMAND=&H0&或MF_BYPOSITION=&H400&,取決于nPosition參數
    返回值 Long,非零表示成功,零表示失敗

      然后就可以在程序中使用這兩個函數了,我們在窗體的Form_Load()過程中加入如下代碼:

       MyMenu = GetSystemMenu(Me.hwnd,0)    得到系統菜單的句柄,Me.hwnd表示當前窗體的句柄

       RemoveMenu MyMenu, &HF060, MF_BYCOMMAND 移去“關閉”菜單項,&HF060“關閉”菜單項的命令ID

      接著我們運行程序,看看窗體右上角的X按鈕是不是已經不可點擊了,系統菜單中的“關閉”項也消失了,很有趣,不過一定記著為程序留一個“退出”按鈕哦!

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系: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>