先说透明控件:
    我做了一个透明的窗体,然后在上面放了一个PICTUREBOX和一个LABEL,要怎么样才能把这两个控件设置成透明的啊?窗体我是用GETWINDOWSLONG函数来改变它的样式的。用什么函数才可以得到控件得样式并改变它?
关于右键弹出菜单的问题:
    因为这个窗体我想做成没有边框的,也就是我把FORM的borderstyle属性要设成NONE,在不放置菜单的时候是没有边框的,可是在我设置了菜单后,边框又出现了。我把菜单设置成不可见,改为用右键弹出菜单,可是右键弹出是没有问题,可是窗体的边框还在,要怎么样才能把边框除去?请大家给点指导!谢谢。

解决方案 »

  1.   

    label的透明可以这样做:label.backstyle=1
      

  2.   

    无边框窗体的右键菜单
    设计无边框窗体时,如果使用菜单编辑器,就会自动改变成有边框的窗体,此时,可以在另外一个窗体中(一般情况下你的程序应该不止一个窗体的吧,如果真的只有一个,可以利用其他人写的类,添加右键)编辑菜单(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
      

  3.   

    //别人的代码'模块
    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
      

  4.   

    还有个问题,透明是解决了,可是上面的picturebox和label都看不到了,该怎么办阿?
    '透明的窗体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兄弟的代码倒是解决了我关于菜单的问题。谢谢!
      

  5.   

    你可以直接使用透明控件, 不用把控件特意改为透明, 添加部件 Microsoft forms2.0 object library
    透明控件把Backstyle改为0-你试试