为了给无边框窗体加上菜单栏,我用label控件模拟菜单项,在其单击事件中调用popupmenu,在其mousemove事件中调整另外一个shape控件的位置和大小,以体现出和标准菜单项相似的功能,但是当点击一个label后弹出下拉菜单,这时再移动鼠标到另外一个label后为什么无法检测到其mousemove事件,从而也就得不到和标准菜单相同的效果啊 (标准的菜单点击一个菜单后,鼠标移动到另外一个菜单后会自动弹出其下拉菜单)

解决方案 »

  1.   

    Option Explicit
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Sub Form_DblClick()
    End
    End SubPrivate Sub Form_Load()
    Me.Show
    SetWindowLong Me.hwnd, -16, &H160C0000
    Me.Width = Me.Width + 10
    End Sub要在窗体上做好菜单先。
      

  2.   

    我顶,为什么不用popupmenu方法,先在另一个窗体内把菜单写好,在无边框的窗体上用popupmenu方法弹出菜单,不知这样是否符合你的要求?
      

  3.   

    倒过来想吧。窗体显示出来后API再把标题栏去掉啊!
      

  4.   

    下面的代码能把正常窗体的标题栏去掉而保持菜单,不过只有手动改变一下窗体的大小才能实现,你自己修改一下。Private Sub Form_Load()
    Dim sy As Long
    Dim newsy As Long
    Const GWL_STYLE = -16
    Const WS_CAPTION = &HC00000
    sy = GetWindowLong(Me.hwnd, GWL_STYLE)
    newsy = SetWindowLong(Me.hwnd, GWL_STYLE, sy - WS_CAPTION)
    End Sub
      

  5.   

    弄好了。打开VB,新建一个,然后加入菜单。
    输入:
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Sub Form_Load()
    Dim sy As Long
    Dim newsy As Long
    Const GWL_STYLE = -16
    Const WS_CAPTION = &HC00000
    Const WS_BORDER = &H800000
    sy = GetWindowLong(Me.hwnd, GWL_STYLE)
    newsy = SetWindowLong(Me.hwnd, GWL_STYLE, sy - WS_CAPTION - WS_BORDER)
    End Sub运行就出现了无边框但有菜单的窗体了。
      

  6.   

    上面的窗体不能移动,不过,你可以用移动“无边框”窗体的方法实现。如果把窗体的BorderStyle设为1则比较好看。
    加入下面语句,可以移动它。
    Private Declare Function ReleaseCapture Lib "user32" () As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 ThenCall ReleaseCapture
    Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)End IfEnd Sub有个待解决的问题就是鼠标移动到菜单上时不能移动它,不知道谁有解决的办法。
      

  7.   

    你看到过那个用vb写xp菜单的列子吗?写个菜单类,然后在单击鼠标时调用
    我只是提供个思路,你自己找来看看。