我想设计一个Vista透明风格的窗体Form1,然后再调用一个BorderStyle=0的窗体Form2。 Form1的作用是美观、透明,Form2的作用是放需要使用、显示的控件。但是需要添加菜单,我想在Form2上添加菜单,但是添加菜单之后,Form2.BorderStyle = 0的情况下,在Form1中显示Form2会出现Form2.BorderStyle <> 0. 请问有没有办法在有菜单栏的情况下,设置Form的BorderStyle=0?
调试欢乐多
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
暂时采用Fanks的方法了~不过还有两个小问题,希望大家能帮帮忙~我先去给帖子加分~1.那请问Form1设置成透明之后,还能显示窗体的Caption和Icon吗?2.还有就是加载两个窗体之后,Form2上的菜单为灰色,只有点击Form2之后菜单才显示为激活的黑色,请问能实现Form1获得焦点的时候,Form2中的菜单还能是激活的状态吗?