Lập trình bằng ngôn ngữ Visual Basic (1)

09:35 09/07/2002
Bấm ngay
Đăng Ký xem video hay mới nhất

Em có một số thắc mắc trong việc lập trình bằng ngôn ngữ VB, mong mọi người chỉ giúp:

Private Sub Form_Load()
Dim MenuBarHandle As Long
Dim PopupMenuHandle As Long
MenuBarHandle = CreateMenu " Tạo MenuBar chính
PopupMenuHandle = CreatePopupMenu " Tạo PopupMenu thứ 1 trên MenuBar chính
" Tạo các mục SubMenu trong PopupMenu này
AppendMenu PopupMenuHandle, MF_STRING, 1, "SubMenu 1"
AppendMenu PopupMenuHandle, MF_STRING, 2, "SubMenu 2"
AppendMenu PopupMenuHandle, MF_STRING, 3, "SubMenu 3"
AppendMenu PopupMenuHandle, MF_STRING, 4, "SubMenu 4"

" Đ­ưa PopupMenu này vào MenuBar
AppendMenu MenuBarHandle, MF_STRING Or MF_POPUP, PopupMenuHandle, " PopupMenu 1"
" Đưa MenuBar vào form
SetMenu Me.hwnd, MenuBarHandle
End Sub

Với đoạn mã này thì trong bư­ớc tạo MenuBar chính và PopupMenu thứ không phát sinh lỗi gì (hàm trả về Handle của Menu ). Như­ng với các bư­ớc tiếp theo: Tạo các SubMenu, đưa PopupMenu vào MenuBar, đưa MenuBar vào Form thì hàm trả về giá trị lỗi (trả về giá trị 1). Và không hiển thị đư­ợc Menu trên Form như mong muốn.
Nhưng nếu trên Form dùng Menu Editor tạo trư­ớc 1 PopupMenu, và không dùng lệnh CreateMenu để tạo MenuBar chính mà dùng hàm GetMenu để lấy Handle Menu đã đư­ợc tạo trước bằng Menu Editor thì chư­ơng trình hiển thị Menu đúng.

Như­ vậy lỗi phát sinh ra với đoạn mã trên là vì sao? Mong mọi người chỉ giúp và chỉ cách gọi Popup Menu bằng lệnh khi Menu này được tạo bằng API như trên (không tạo bằng MenuEditor nên không thể dùng PopupMene như­ bình thư­ờng đư­ợc). Xin chân thành cám ơn.

Viet Vu

Hồi âm:

Try this:

Const MF_CHECKED = &H8&
Const MF_APPEND = &H100&
Const TPM_LEFTALIGN = &H0&
Const MF_DISABLED = &H2&
Const MF_GRAYED = &H1&
Const MF_SEPARATOR = &H800&
Const MF_STRING = &H0&
Const TPM_RETURNCMD = &H100&
Const TPM_RIGHTBUTTON = &H2&
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal HWnd As Long, ByVal lptpm As Any) As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVallpNewItem As Any) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim PopupMenuHandle As Long

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, yAs Single)
Dim Pt As POINTAPI
Dim ret As Long
GetCursorPos Pt
ret = TrackPopupMenuEx(PopupMenuHandle, TPM_LEFTALIGN Or TPM_RETURNCMD
Or TPM_RIGHTBUTTON, Pt.x, Pt.y, Me.HWnd, ByVal 0&)
End Sub

Private Sub Form_Load()
"MenuBarHandle = CreateMenu " T?o MenuBar chính
PopupMenuHandle = CreatePopupMenu() " T?o PopupMenu th? 1 trên MenuBar chính
" T?o các m?c SubMenu trong PopupMenu này
AppendMenu PopupMenuHandle, MF_STRING, 1, "SubMenu 1"
AppendMenu PopupMenuHandle, MF_GRAYED, 2, "SubMenu 2"
AppendMenu PopupMenuHandle, MF_SEPARATOR, 3, "SubMenu 3"
AppendMenu PopupMenuHandle, MF_CHECKED, 4, "SubMenu 4"

" Đ­ua PopupMenu này vào MenuBar
"AppendMenu MenuBarHandle, MF_STRING Or MF_POPUP, PopupMenuHandle, "
PopupMenu 1"
" Đua MenuBar vào form
"SetMenu Me.HWnd, MenuBarHandle
End Sub

Minh Tran

Việt Báo
contentlength: 4739
Chia sẻ
Bấm ngay
Đăng Ký xem video hay mới nhất