先说透明控件:
我做了一个透明的窗体,然后在上面放了一个PICTUREBOX和一个LABEL,要怎么样才能把这两个控件设置成透明的啊?窗体我是用GETWINDOWSLONG函数来改变它的样式的。用什么函数才可以得到控件得样式并改变它?
关于右键弹出菜单的问题:
因为这个窗体我想做成没有边框的,也就是我把FORM的borderstyle属性要设成NONE,在不放置菜单的时候是没有边框的,可是在我设置了菜单后,边框又出现了。我把菜单设置成不可见,改为用右键弹出菜单,可是右键弹出是没有问题,可是窗体的边框还在,要怎么样才能把边框除去?请大家给点指导!谢谢。
我做了一个透明的窗体,然后在上面放了一个PICTUREBOX和一个LABEL,要怎么样才能把这两个控件设置成透明的啊?窗体我是用GETWINDOWSLONG函数来改变它的样式的。用什么函数才可以得到控件得样式并改变它?
关于右键弹出菜单的问题:
因为这个窗体我想做成没有边框的,也就是我把FORM的borderstyle属性要设成NONE,在不放置菜单的时候是没有边框的,可是在我设置了菜单后,边框又出现了。我把菜单设置成不可见,改为用右键弹出菜单,可是右键弹出是没有问题,可是窗体的边框还在,要怎么样才能把边框除去?请大家给点指导!谢谢。
设计无边框窗体时,如果使用菜单编辑器,就会自动改变成有边框的窗体,此时,可以在另外一个窗体中(一般情况下你的程序应该不止一个窗体的吧,如果真的只有一个,可以利用其他人写的类,添加右键)编辑菜单(VISIBLE属性设为FALSE),然后在本窗体中调用。调用形式如下:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu Form2.mymenu
End If
End Sub
Public Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long ''以下2个切除窗口的边框
Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hrgn As Long, ByVal bRedraw As Boolean) As Long
Public Type POINTAPI
X As Long
Y As Long
End Type
Public Type rect
left As Long
top As Long
right As Long
bottom As Long
End TypePublic Sub MakeNoBorderForm(frm As Form)
'切除窗口的边框
Dim rctClient As rect, rctFrame As rect
Dim hrgn As Long
Dim lRes As Long
ReDim XY(3) As POINTAPI
Dim lpTL As POINTAPI, lpBR As POINTAPI
'获得窗口矩形区域
'将窗口矩形坐标转换为屏幕坐标
lpTL.X = frm.left / 15
lpTL.Y = frm.top / 15
ScreenToClient frm.hWnd, lpTL
rctClient.left = Abs(lpTL.X)
rctClient.top = Abs(lpTL.Y)
frm.ScaleMode = 1 'Twip
rctClient.right = frm.ScaleWidth / 15 + Abs(lpTL.X)
rctClient.bottom = frm.ScaleHeight / 15 + Abs(lpTL.Y)
'建立要切割的数组
XY(0).X = rctClient.left
XY(0).Y = rctClient.top
XY(1).X = rctClient.right
XY(1).Y = rctClient.top
XY(2).X = rctClient.right
XY(2).Y = rctClient.bottom
XY(3).X = rctClient.left
XY(3).Y = rctClient.bottom
hrgn = CreatePolygonRgn(XY(0), 4, 2)
lRes = SetWindowRgn(frm.hWnd, hrgn, True)
End Sub'窗体
Private Sub Form_Initialize()
MakeNoBorderForm Me '创建没有任务栏的窗体
End Sub
'透明的窗体Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd _
As Long, lpRECT As rect) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd _
As Long, lpRECT As rect) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn _
As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, _
ByVal nCombineMode As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As _
Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) _
As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd _
As Long, lpPoint As POINTAPI) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As _
Long, ByVal hrgn As Long, ByVal bRedraw As Boolean) As LongConst RGN_XOR = 3Private Type POINTAPI
X As Long
Y As Long
End TypePrivate Type rect
left As Long
top As Long
right As Long
bottom As Long
End TypePrivate rctClient As rect, rctFrame As rect
Private hClient As Long, hFrame As LongPrivate Sub MakeTransparent(frm As Form)
GetFrameClientRgn frm
SetWindowRgn frm.hWnd, hFrame, True
End SubPrivate Sub GetFrameClientRgn(frm As Form)
GetWindowRect frm.hWnd, rctFrame
GetClientRect frm.hWnd, rctClient '将窗口矩形坐标转换为屏幕坐标
Dim lpTL As POINTAPI, lpBR As POINTAPI
lpTL.X = rctFrame.left
lpTL.Y = rctFrame.top
lpBR.X = rctFrame.right
lpBR.Y = rctFrame.bottom
ScreenToClient frm.hWnd, lpTL
ScreenToClient frm.hWnd, lpBR
rctFrame.left = lpTL.X
rctFrame.top = lpTL.Y
rctFrame.right = lpBR.X
rctFrame.bottom = lpBR.Y
rctClient.left = Abs(rctFrame.left)
rctClient.top = Abs(rctFrame.top)
rctClient.right = rctClient.right + Abs(rctFrame.left)
rctClient.bottom = rctClient.bottom + Abs(rctFrame.top)
rctFrame.right = rctFrame.right + Abs(rctFrame.left)
rctFrame.bottom = rctFrame.bottom + Abs(rctFrame.top)
rctFrame.top = 0
rctFrame.left = 0 hClient = CreateRectRgn(rctClient.left, rctClient.top, _
rctClient.right, rctClient.bottom)
hFrame = CreateRectRgn(rctFrame.left, rctFrame.top, _
rctFrame.right, rctFrame.bottom) CombineRgn hFrame, hClient, hFrame, RGN_XOR
End SubPrivate Sub Form_Resize()
MakeTransparent Me
End Sub
这个是做出透明窗体的代码(社区里别人的),可是我觉得这个好像不是窗体了,只是在原来的窗体周围画了一条线。原来窗体上的控件什么的一个都看不到。感觉是窗体整个都没有了,只剩下个边框一样。哪个兄弟有好的解决办法阿!5653325兄弟的代码倒是解决了我关于菜单的问题。谢谢!
透明控件把Backstyle改为0-你试试