• Thứ Hai, 12/02/2007 09:23 (GMT+7)

    Cách vô hiệu nút close của MDI form

    Câu hỏi :
    Xin hỏi có cách nào vô hiệu hóa nút close của MDI form không? Nếu không thì có cách nào cho phép chọn lựa tắt chương trình hoặc không khi nhấn vào nút close? 
     

    Trả lời :

    Nút Close của form VB 6.0 (form chính hay form MDI child) tương ứng với option Close trong menu hệ thống của form đó, do đó bạn có thể vô hiệu hóa nút Close của form bằng cách cấm option Close trong menu hệ thống của form đó. Sau đây là đoạn code VB (được đặt trong hàm Form_Load của form tương ứng) vô hiệu hóa nút Close.

     Option Explicit
     'khai báo các hàm API Windows cần dùng
     Private Declare Function GetSystemMenu Lib "user32"(ByVal hWnd As Long, ByVal bRevert As Long) As Long
     
     Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA"(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
     
     Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
     
     'khai báo các hằng cần dùng
     Const MF_BYPOSITION = &H400&
     Const MF_GRAYED = &H1&
     Const MF_BYCOMMAND = &H0&
     
     'Viết thêm code cho hàm Form_Load
     Private Sub Form_Load()
     'đoạn code để vô hiệu hóa nút Close của form này
     Dim hwndParent As Long
     hwndParent = Me.hWnd
     DisableItem hwndParent, "&Close", 6
     'đoạn code thực hiện các chức năng còn lại của form
     ...
     End Sub
     
     'thủ tục cấm 1 option menu
     Sub DisableItem(hWnd As Long, sMenuCaption As String, iMenuPos As Integer)
     Dim hMenu As Long
     Dim hItem As Long
     hMenu = GetSystemMenu(hWnd, 0)
     hItem = GetMenuItemID(hMenu, iMenuPos)
     ModifyMenu hMenu, hItem, MF_BYCOMMAND Or MF_GRAYED, -9, sMenuCaption
     End Sub
     

    Chuyên mục: Lập trình