我想设计一个Vista透明风格的窗体Form1,然后再调用一个BorderStyle=0的窗体Form2。    Form1的作用是美观、透明,Form2的作用是放需要使用、显示的控件。但是需要添加菜单,我想在Form2上添加菜单,但是添加菜单之后,Form2.BorderStyle = 0的情况下,在Form1中显示Form2会出现Form2.BorderStyle <> 0.    请问有没有办法在有菜单栏的情况下,设置Form的BorderStyle=0?

解决方案 »

  1.   

    菜单隐藏,用TOOLBAR+PopupMenu来模拟一个菜单条.
      

  2.   

    Option Explicit
    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 Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOZORDER = &H4
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_DRAWFRAME = &H20
    Private Const GWL_STYLE = (-16)
    Private Const WS_THICKFRAME = &H40000
    Private Const WS_DLGFRAME = &H400000
    Private Const WS_POPUP = &H80000000
    Private Const WS_CAPTION = &HC00000
    Private Const WS_SYSMENU = &H80000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const WS_MAXIMIZEBOX = &H10000
    Private Const WS_MINIMIZE = &H20000000
    Private Const WS_MAXIMIZE = &H1000000Private Sub ControlCaption(ControlName As Object, SetTrue As Boolean)
    Dim dwStyle As Long
    dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
    If SetTrue Then
    dwStyle = dwStyle Or WS_CAPTION
    Else
    dwStyle = dwStyle - WS_CAPTION
    End If
    dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
    SetWindowPos ControlName.hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
    End SubPrivate Sub Form_Load()
    Call ControlCaption(Me, False)
    End Sub
      

  3.   

    把Form2的controlbox设为false,caption设为空,就类似BorderStyle=0的效果了,不过还是3D风格的。
      

  4.   

    非常感谢大家!!!
    暂时采用Fanks的方法了~不过还有两个小问题,希望大家能帮帮忙~我先去给帖子加分~1.那请问Form1设置成透明之后,还能显示窗体的Caption和Icon吗?2.还有就是加载两个窗体之后,Form2上的菜单为灰色,只有点击Form2之后菜单才显示为激活的黑色,请问能实现Form1获得焦点的时候,Form2中的菜单还能是激活的状态吗?