建立了一个form,name值是form1;上面放一个commandbutton,name值是command1.
这段代码的功能是制作一个外轮廓是椭圆、中间有一个方孔的窗体,可是我试了,
不是这个样子,请各位高手指教,给我解释一下每段代码的意思,多谢!
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 Declare Function ReleaseCapture Lib "user32" () As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MOVE = &HF012Private Sub Command1_Click()
  End
End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  ReleaseCapture
  SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Sub

解决方案 »

  1.   

    Option ExplicitPrivate 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 CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) 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 SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As LongPrivate Sub Form_Resize()
    Const RGN_DIFF = 4Dim outer_rgn As Long
    Dim inner_rgn As Long
    Dim combined_rgn As Long
    Dim wid As Single
    Dim hgt As Single
    Dim border_width As Single
    Dim title_height As Single    If WindowState = vbMinimized Then Exit Sub
        
        ' Create the regions.
        wid = ScaleX(Width, vbTwips, vbPixels)
        hgt = ScaleY(Height, vbTwips, vbPixels)
        outer_rgn = CreateRectRgn(0, 0, wid, hgt)
        
        border_width = (wid - ScaleWidth) / 2
        title_height = hgt - border_width - ScaleHeight
        inner_rgn = CreateEllipticRgn( _
            border_width + ScaleWidth * 0.1, _
            title_height + ScaleHeight * 0.1, _
            ScaleWidth * 0.9, ScaleHeight * 0.9)    ' Subtract the inner region from the outer.
        combined_rgn = CreateRectRgn(0, 0, 0, 0)
        CombineRgn combined_rgn, outer_rgn, _
            inner_rgn, RGN_DIFF
        
        ' Restrict the window to the region.
        SetWindowRgn hWnd, combined_rgn, True
    End Sub