国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 17:53:46
字體:
來源:轉載
供稿:網友
為了學習方便,下面先給出源碼,并且已經作了詳細的中文注釋:

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

PRivateDeclareFunctionGetSystemMenuLib"user32"(ByValhwndAsLong,ByValbRevertAsLong)AsLong

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

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

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

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

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

PrivateDeclareFunctionGetSystemMenuLib"user32"(_
ByValhwndAsInteger,_
ByValbRevertAsInteger_
)AsInteger

【VB聲明】

PrivateDeclareFunctionRemoveMenuLib"user32"(ByValhMenuAsLong,ByValnPositionAsLong,ByValwFlagsAsLong)AsLong

【說明】
刪除指定的菜單條目。如刪除的條目屬于一個彈出式菜單,那么這個函數不會同時刪除彈出式菜單。首先應該用GetSubMenu函數取得彈出式菜單的句柄,再在以后將其刪除

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

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

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

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

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

PrivateDeclareFunctionRemoveMenuLib"user32"(_
ByValhMenuAsInteger,_
ByValnPositionAsInteger,_
ByValwFlagsAsInteger_
)AsInteger

PrivateSubCommand1_Click()
UnloadMe
EndSub

PrivateSubForm_Load()
DimRAsInteger
MyMenu=GetSystemMenu(Me.hwnd,0)
RemoveMenuMyMenu,&HF060,R
EndSub

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

   PrivateDeclareFunctionGetSystemMenuLib"user32"(ByValhwndAsLong,ByValbRevertAsLong)AsLong

   PrivateDeclareFunctionRemoveMenuLib"user32"(ByValhMenuAsLong,ByValnPositionAsLong,ByValwFlagsAsLong)AsLong
其中各GetSystemMenu參數的意義如下表:

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

  而RemoveMenu參數的意義如下表:

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

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

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

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

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

->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳泉市| 连山| 抚顺县| 保山市| 南江县| 融水| 阜康市| 中阳县| 南阳市| 方城县| 左云县| 永胜县| 林州市| 滦南县| 神木县| 桐庐县| 广元市| 手游| 安远县| 绵阳市| 景宁| 增城市| 得荣县| 勐海县| 阿克苏市| 马鞍山市| 乐陵市| 岳西县| 南康市| 鹰潭市| 平顺县| 榕江县| 苍溪县| 闸北区| 乌鲁木齐县| 沂南县| 南雄市| 丰都县| 清原| 永定县| 象山县|