如何用以下几个api函数实现窗体随着本窗体中的label的大小改变而改变 label里面的信息是通过自己写的一个MessageBox的Prompt输入
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long
Private Type Size
        cx As Long
        cy As Long
End Type

解决方案 »

  1.   

    最好是有例程 在下对api还不是很了解...谢谢了
      

  2.   

    一个输出区域设定的例子:
    模块内容:
    Option ExplicitPublic Const DT_BOTTOM = &H8
    Public Const DT_CALCRECT = &H400
    Public Const DT_CENTER = &H1
    Public Const DT_EXPANDTABS = &H40
    Public Const DT_EXTERNALLEADING = &H200
    Public Const DT_LEFT = &H0
    Public Const DT_NOCLIP = &H100
    Public Const DT_NOPREFIX = &H800
    Public Const DT_RIGHT = &H2
    Public Const DT_SINGLELINE = &H20
    Public Const DT_TABSTOP = &H80
    Public Const DT_TOP = &H0
    Public Const DT_VCENTER = &H4
    Public Const DT_WORDBREAK = &H10Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypeType SIZE
            cx As Long
            cy As Long
    End TypeDeclare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
    Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
    Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long
    窗体内容:
    Option ExplicitPrivate Sub Command1_Click()
        Dim r As RECT, s As SIZE
        
        r.Left = 50: r.Top = 50
        r.Right = 135: r.Bottom = 65
        Line (r.Left, r.Top)-(r.Right, r.Bottom), RGB(255, 255, 0), BF
        DrawText Me.hDC, "Draw Text Test", 14, r, 0
        
        r.Left = 50: r.Top = 100
        r.Right = 135: r.Bottom = 115
        Line (r.Left, r.Top)-(r.Right, r.Bottom), RGB(255, 255, 0), BF
        DrawText Me.hDC, "Draw Text Test", 14, r, DT_NOCLIP
            GetTextExtentPoint32 Me.hDC, "Draw Text Test", 14, s
        
        r.Left = 50: r.Top = 150
        r.Right = r.Left + s.cx: r.Bottom = r.Top + s.cy
        Line (r.Left, r.Top)-(r.Right, r.Bottom), RGB(255, 255, 0), BF
        DrawText Me.hDC, "Draw Text Test", 14, r, 0
        
    End Sub
      

  3.   

    GetWindowDC和ReleaseDC的用法示例如下:模块内容:
    Option ExplicitDeclare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
    Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long窗体内容:
    Option ExplicitDim N As LongPrivate Sub cmdPrint_Click()
        Dim sx As Long, sy As Long, hDC As Long
        Dim px As Long, py As Long, I As Integer
        
        Me.ScaleMode = vbPixels
        
        sx = Me.Width / Screen.TwipsPerPixelX
        sy = Me.Height / Screen.TwipsPerPixelY
        picPrint.Width = sx
        picPrint.Height = sy
        
        For I = 0 To Controls.Count - 1
            If TypeName(Controls(I)) <> "Menu" Then Controls(I).Visible = False
        Next
        DoEvents    
        picPrint.AutoRedraw = True
        
        hDC = GetWindowDC(Me.hWnd)
        BitBlt picPrint.hDC, 0, 0, sx, sy, hDC, 0, 0, vbSrcCopy
        ReleaseDC Me.hWnd, hDC
        picPrint.AutoRedraw = False
        
        For I = 0 To Controls.Count - 1
            If TypeName(Controls(I)) <> "Menu" And _
               Controls(I).Name <> "picPrint" Then Controls(I).Visible = True
        Next    
        Set picPrint.Picture = picPrint.Image
        
        Dim w As Long, h As Long
        
        Me.ScaleMode = vbTwips
        Printer.ScaleMode = vbTwips
        w = picPrint.Width * N \ 100
        h = picPrint.Height * N \ 100
        px = (Printer.ScaleWidth - w) / 2
        py = (Printer.ScaleHeight - h) / 2
        Printer.PaintPicture picPrint.Picture, px, py, w, h
        Printer.EndDoc
    End SubPrivate Sub Form_Load()
        mPercent(100).Checked = True
        
        N = 100
    End SubPrivate Sub mPercent_Click(Index As Integer)
        mPercent(50).Checked = False
        mPercent(100).Checked = False
        mPercent(150).Checked = False
        mPercent(200).Checked = False
        
        mPercent(Index).Checked = True
        N = Index
    End Sub
      

  4.   

    MoveWindow:
    VB声明 
    Declare Function MoveWindow Lib "user32" Alias "MoveWindow" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long 
    说明 
    改变指定窗口的位置和大小。顶级窗口可能受最大或最小尺寸的限制,那些尺寸优先于这里设置的参数 
    返回值 
    Long,非零表示成功,零表示失败 
    参数表 
    参数 类型及说明 
    hwnd Long,欲移动窗口的句柄 x Long,窗口新的左侧位置 
    y Long,窗口新的顶部位置 
    nWidth Long,窗口的新宽度 
    nHeight Long,窗口的高宽度 
    bRepaint Long,如窗口此时应重画,则设为TRUE(非零)。FALSE(零)则表明应用程序会自己决定是否重画窗口
    GetWindowDC VB声明 
    Declare Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As Long) As Long 
    说明 
    获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景 
    返回值 
    Long,执行成功为窗口设备场景,失败则为0 
    参数表 
    参数 类型及说明 
    hwnd Long,将获取其设备场景的窗口 
    注解 
    不推荐在vb里使用这个函数。用完后一定要用ReleaseDC函数释放场景
     
    ReleaseDC VB声明 
    Declare Function ReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal hwnd As Long, ByVal hdc As Long) As Long 
    说明 
    释放由调用GetDC或GetWindowDC函数获取的指定设备场景。它对类或私有设备场景无效(但这样的调用不会造成损害) 
    返回值 
    Long,执行成功为1,否则为0 
    参数表 
    参数 类型及说明 
    hwnd Long,要释放的设备场景相关的窗口句柄 
    hdc Long,要释放的设备场景句柄 
    注解 
    对那些用CreateDC一类的DC创建函数生成的设备场景,不要用本函数GetTextExtentExPoint VB声明 
    Declare Function GetTextExtentExPoint Lib "gdi32" Alias "GetTextExtentExPointA" (ByVal hdc As Long, ByVal lpszStr As String, ByVal cchString As Long, ByVal nMaxExtent As Long, lpnFit As Long, alpDx As Long, lpSize As SIZE) As Long 
    说明 
    判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hdc Long,设备场景的句柄 
    lpszStr String,准备量度其范围的字串 
    cchString Long,lpszStr字串的长度 
    nMaxExtent Long,采用逻辑单位表示的水平范围 
    lpnFit Long,在其中保存欲填充到指定区域的字符数量。可以为NULL(用一个别名化的声明来设置ByVal As Long)——此时会忽略nMaxExtent设置 
    As Long,cchString数组的第一个条目。每个条目都要保存从字串起点到这个字符的距离(采用逻辑单位)。如果不需要这方面的信息,也可设为NULL(用别名声明设置 ByVal As Long) 
    lpSize SIZE,这个结构用于装载字串范围的高度和宽度信息 
    注解 
    可用这个函数计算自动换行输出时的字符位置
     
      

  5.   

    lilaclone(~~阿九~~) 厉害,为你UP!