久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨(dú)角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來(lái),internet一定要實(shí)現(xiàn)!

VB中使窗體右上角的X按鈕失效

2004-02-20 eNet&Ciweek

  為了學(xué)習(xí)方便,下面先給出源碼,并且已經(jīng)作了詳細(xì)的中文注釋?zhuān)?

-------------------------------------------
使窗體右上角的X按鈕失效
-------------------------------------------
程序說(shuō)明:
本例利用API函數(shù)GetSystemMenu得到系統(tǒng)菜單的句柄
X按鈕是系統(tǒng)菜單的一菜單項(xiàng),然后用RemoveMenu函數(shù)
刪去這一菜單項(xiàng),也就是使X按鈕失效了。
-------------------------------------------
【VB聲明】

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


【說(shuō)明】
取得指定窗口的系統(tǒng)菜單的句柄。在vb環(huán)境,“系統(tǒng)菜單”的正式名稱(chēng)為“控制菜單”,即單擊窗口左上角的控制框時(shí)出現(xiàn)的菜單

【返回值】
Long,如執(zhí)行成功,返回系統(tǒng)菜單的句柄;零意味著出錯(cuò)。如bRevert設(shè)為T(mén)RUE,也會(huì)返回零(簡(jiǎn)單的恢復(fù)原始的系統(tǒng)菜單)

【備注】
在vb里使用:系統(tǒng)菜單會(huì)向窗口發(fā)送一條WM_SYSCOMMAND消息,而不是WM_COMMAND消息

【參數(shù)表】
hwnd ----------- Long,窗口的句柄

bRevert -------- Long,如設(shè)為T(mén)RUE,表示接收原始的系統(tǒng)菜單

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

【說(shuō)明】
刪除指定的菜單條目。如刪除的條目屬于一個(gè)彈出式菜單,那么這個(gè)函數(shù)不會(huì)同時(shí)刪除彈出式菜單。首先應(yīng)該用GetSubMenu函數(shù)取得彈出式菜單的句柄,再在以后將其刪除

【返回值】
Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError

【備注】
強(qiáng)烈建議大家使用vb菜單的visible屬性從菜單中刪除條目,而不要用這個(gè)函數(shù),否則會(huì)造成指定菜單中其他菜單條目的visible屬性對(duì)錯(cuò)誤的菜單條目產(chǎn)生影響

【參數(shù)表】
hMenu ---------- Long,菜單的句柄

nPosition ------ Long,欲改變的菜單條目的標(biāo)識(shí)符。如在wFlags參數(shù)中指定了MF_BYCOMMAND,這個(gè)參數(shù)就代表欲改變的菜單條目的命令I(lǐng)D。如設(shè)置的是MF_BYPOSITION,這個(gè)參數(shù)就代表菜單條目在菜單中的位置(第一個(gè)條目的位置為零)

wFlags --------- Long,常數(shù)MF_BYCOMMAND或MF_BYPOSITION,取決于nPosition參數(shù)



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


  程序中用到了兩個(gè)API函數(shù)GetSystemMenu、RemoveMenu,其中GetSystemMenu函數(shù)用來(lái)得到系統(tǒng)菜單的句柄,RemoveMenu用來(lái)刪除指定的菜單條目,我們先來(lái)看看這個(gè)函數(shù)的聲明和參數(shù):



   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參數(shù)的意義如下表:

參數(shù) 意義
hwnd Long 系統(tǒng)菜單所在窗口的句柄
bRevert Long 如設(shè)為T(mén)RUE,表示恢復(fù)原始的系統(tǒng)菜單
返回值 Long 如執(zhí)行成功,返回系統(tǒng)菜單的句柄;零意味著出錯(cuò)。如bRevert設(shè)為T(mén)RUE,也會(huì)返回零(簡(jiǎn)單的恢復(fù)原始的系統(tǒng)菜單)

  而RemoveMenu參數(shù)的意義如下表:

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

  然后就可以在程序中使用這兩個(gè)函數(shù)了,我們?cè)诖绑w的Form_Load()過(guò)程中加入如下代碼:

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

   RemoveMenu MyMenu, &HF060, MF_BYCOMMAND 移去“關(guān)閉”菜單項(xiàng),&HF060“關(guān)閉”菜單項(xiàng)的命令I(lǐng)D

  接著我們運(yùn)行程序,看看窗體右上角的X按鈕是不是已經(jīng)不可點(diǎn)擊了,系統(tǒng)菜單中的“關(guān)閉”項(xiàng)也消失了,很有趣,不過(guò)一定記著為程序留一個(gè)“退出”按鈕哦!

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見(jiàn),請(qǐng)?jiān)谙路教峤?,謝謝!

投稿信箱:tougao@enet16.com