我們前面講了怎樣去除 VBA 窗體的關(guān)閉按鈕,其實(shí)個人感覺沒有這個關(guān)閉按鈕會使整個窗體感覺有點(diǎn)怪,但有時候又想讓他不可用,變得不可點(diǎn)擊,那該怎么實(shí)現(xiàn)呢? 好,我們馬上就來試一試看看。
1文件名稱 1下載鏈接 1禁用窗體關(guān)閉按鈕.zip http://pan.baidu.com/s/1ntG6Odj
Option Explicit'****************************************'---此模塊演示了禁用窗體關(guān)閉按鈕---'****************************************'以下聲明API函數(shù)#If Win64 Then '64位 '查找窗口 Private Declare PtrSafe Function FindWindow _ Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) _ As LongPtr '取得窗體系統(tǒng)菜單 Private Declare PtrSafe Function GetSystemMenu _ Lib "user32" ( _ ByVal hwnd As LongPtr, _ ByVal bRevert As Long) _ As LongPtr '刪除菜單項(xiàng) Private Declare PtrSafe Function DeleteMenu _ Lib "user32" ( _ ByVal hMenu As LongPtr, _ ByVal nPosition As Long, _ ByVal wFlags As Long) _ As Long '重繪窗體標(biāo)題欄 Private Declare PtrSafe Function DrawMenuBar _ Lib "user32" ( _ ByVal hwnd As LongPtr) _ As Long#Else '32位 '查找窗口 Private Declare Function FindWindow _ Lib "User32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) _ As Long '取得窗體系統(tǒng)菜單 Private Declare Function GetSystemMenu _ Lib "User32" ( _ ByVal Hwnd As Long, _ ByVal bRevert As Long) _ As Long '刪除菜單項(xiàng) Private Declare Function DeleteMenu _ Lib "User32" ( _ ByVal HMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) _ As Long '重繪窗體標(biāo)題欄 Private Declare Function DrawMenuBar _ Lib "User32" ( _ ByVal Hwnd As Long) _ As Long#End If'以下定義常數(shù)Private Const MF_BYCOMMAND = &H0&Private Const SC_CLOSE = &HF060'以下下定義變量#If Win64 Then '64位 Private FHwnd As LongPtr Private hMenu As LongPtr#Else Private FHwnd As Long Private hMenu As Long#End If'關(guān)閉按鈕點(diǎn)擊Private Sub BtCancel_Click() Unload MeEnd Sub'恢復(fù)按鈕點(diǎn)擊Private Sub BtResume_Click() '恢復(fù)原菜單 hMenu = GetSystemMenu(FHwnd, 1) '重繪窗體標(biāo)題欄 DrawMenuBar FHwndEnd Sub'**************************************'---------------主程序-----------------'**************************************Private Sub UserForm_Initialize() '查找窗口句柄 FHwnd = FindWindow("ThunderDFrame", Me.Caption) '取得窗體系統(tǒng)菜單 hMenu = GetSystemMenu(FHwnd, 0) '刪除系統(tǒng)菜單中關(guān)閉菜單 DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND '重繪窗體標(biāo)題欄 DrawMenuBar FHwndEnd Sub |
Option Explicit'此過程為工作表內(nèi)按鈕調(diào)用Sub ShowNotEnabledCloseIconForm() frmNotEnabledCloseIcon.ShowEnd Sub |