4

如何在 VB 6.0 无边框窗体上添加弹出菜单?

每次我添加菜单时,边框都会重新出现,即使BorderStyle设置为vbBSNone并且菜单被隐藏。

4

3 回答 3

6

这是可行的,但有点不满意(对我来说)。通过在表单中​​包含任何菜单属性,边框将默认恢复为可见。但是,有一些解决方法:

1)我认为你会喜欢的方法包括制作你永远不会真正“使用”或看到的第二种形式。将菜单放在第二个窗体上,然后从您实际要使用的窗体中调用该菜单。假设您Form_MouseDown用来调用它,这里是代码:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button And vbRightButton Then PopupMenu Form2.mnuYourMenu
End sub

但是,您必须记住从内存中卸载第二个表单。

2)另一种方法,仅使用第一个表单,将表单设置ControlBoxFalse并将Caption属性留空。当设置为 0 时,这会“删除”边框BorderStyle......我将删除放在引号中,因为它会不幸留下一条 1 像素的黑线。它看起来不错,但对您来说可能不是一个可行的解决方案。

3)最后一种方法,我读到但自己没有做任何事情,是使用CreatePopupMenuAPI,在http://allapi.mentalis.org/apilist/CreatePopupMenu.shtml

希望这可以帮助!

于 2011-03-21T14:49:00.577 回答
0

为了其他来这里寻找这个问题的答案的人的利益,这里有一个非常简单的 API 方法可以工作:

声明:

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const GWL_STYLE = -16, WS_BORDER = &H800000

在 Form_Load 中:

SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) And Not WS_BORDER
于 2012-04-17T19:05:25.717 回答
-1

这个有可能。将窗体的 BorderStyle 设置为 None,将 Caption 设置为空字符串,ControlBox、MaxButton MinButton 设置为 False。然后,使用 VB6 的菜单编辑器,创建一个名为“mnuPopup”的顶级菜单,并将其 Visible 属性设置为 False。将菜单的其余部分创建为该顶级菜单的子菜单,并将其 Visible 属性设置为 True。然后,在表单的代码中,您可以使用 显示菜单PopupMenu menuPopup。它看起来像这样:

在此处输入图像描述

于 2011-03-21T15:05:25.003 回答