六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

[摘要]內容簡介:刪除系統菜單Dim MHwd As LongMHwd = GetSystemMenu(Me.hwnd, False)MsgBox DeleteMenu(MHwd, &H0&...
內容簡介:

刪除系統菜單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按鈕是不是已經不可點擊了,系統菜單中的“關閉”項也消失了,很有趣,不過一定記著為程序留一個“退出”按鈕哦!


主站蜘蛛池模板: 性欧美巨大极品videos | 日韩 欧美 亚洲 国产 | 日日插天天干 | 欧美在线一二三 | 亚洲免费高清视频 | 日本免费一区二区在线观看 | 青青热在线观看视频精品 | 日本一道本在线 | 日韩中文字幕高清在线专区 | 最新国产福利片在线观看 | 亚洲视频在线免费播放 | 亚洲成人精品在线 | 天天做夜夜爽 | 日韩无套 | 亚洲第一区精品日韩在线播放 | 日本不卡视频 | 日韩黄色影视 | 色网站在线看 | 下克上动漫第一集 | 综合久久久久久 | 天天插天天狠天天透 | 亚洲福利一区 | 日本亚洲中午字幕乱码 | 亚洲综合色在线观看 | 星辰影院在线 | 亚洲va中文字幕无码 | 探花2700视频| 日韩毛片在线看 | 手机看片国产欧美日韩高清 | 亚洲综合精品一二三区在线 | 亚洲图片国产日韩欧美 | 青娱乐手机在线视频 | 青青青爽在线视频免费观看 | 日本午夜网站 | 中文字幕不卡高清免费 | 日日干夜夜操s8 | 午夜免费福利影院 | 天天综合色天天综合 | 婷婷热| 天天色综合1 | 日韩精品欧美亚洲高清有无 |