是这样的,
我的主窗口上就只有菜单工具栏和treeview,verticalMenu(类似工具箱的控件)两个控件,其中这两个控件对齐放在屏幕的最左边(width=3000)左右,然后其余整个屏幕均为显示区新增的每个窗口均在此区域内显示。底下还有一个statusbar控件。
问题是如何在程序运行当中保持这两个控件的拖放一致??如何让最大化后或者还原后能成比例缩放。
把问题简单化能解决也送分!!!!!
假设我把屏幕定死,即最大化显示,然后再formload事件里面写完其坐标确定,
但这样不同的分辨率下又会出错。800*600和1024*768不能互用。
简单点的问题是:我如何知道当前系统的分辨率??
还有为什么我的statusbar总是被其它控件所遮住???谢谢(三日内有效结贴)

解决方案 »

  1.   

    没看懂,可以在form_resize中自定义大小啊
      

  2.   

    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
     Const SM_CXSCREEN = 0
     Const SM_CYSCREEN = 1
     
     
    Private Sub Form_Load()
     Dim x As String
     Dim y As String
     n = Str(GetSystemMetrics(SM_CXSCREEN))
     y = Str(GetSystemMetrics(SM_CYSCREEN))
     Label1.Caption = "当前的显示器的分辨率是:" + n + "x" + y
     
    End Sub
      

  3.   

    控件按比例缩放你可以搜索一下以前的帖子,很多的。
    statusbar被遮住应该是你的坐标位置计算不正确。是代码的问题
      

  4.   

    对窗体中所有控件有效,不需要针对单独某个控件进行调整。Private mlngW As Long
    Private mlngh  As Long
    Private Type TControlInfo
        ctrl As Control
        Left As Single
        Top As Single
        Width As Single
        Height As Single
        FontSize As Single
    End Type
    Dim SaveCtrl() As TControlInfoPrivate Sub Form_Load()
        mlngW = Form1.Width
        mlngh = Form1.Height
        '±£´æ¿Ø¼þµÄ״̬
        ReDim SaveCtrl(Form1.Controls.Count - 1) As TControlInfo
        Dim i As Integer
        Dim ctrl As Control
        For i = 0 To Form1.Controls.Count - 1
            Set ctrl = Form1.Controls(i)
            With SaveCtrl(i)
                Set .ctrl = ctrl
                .Left = ctrl.Left
                .Top = ctrl.Top
                .Width = ctrl.Width
                .Height = ctrl.Height
                .FontSize = ctrl.Font.Size
            End With
        Next
    End SubPrivate Sub Form_Resize()
        On Error Resume Next
        Dim lngW As Long
        Dim lngh  As Long
        Dim lngf As Single
        Dim i As Integer
            lngW = Form1.Width
        lngh = Form1.Height    If (lngW / mlngW) < (lngh / mlngh) Then
            lngf = (lngW / mlngW)
        Else
            lngf = (lngh / mlngh)
        End If
           For i = 0 To UBound(SaveCtrl)
          With SaveCtrl(i)
             If .ctrl.Left < 0 Then
                .ctrl.Left = ((.ctrl.Left + 75000) * (lngW / mlngW)) - 75000
             ElseIf .Left < 0 Then
                .ctrl.Left = (.Left + 75000) * (lngW / mlngW)
             Else
                .ctrl.Left = .Left * (lngW / mlngW)
             End If
             .ctrl.Top = .Top * (lngh / mlngh)
             .ctrl.Width = .Width * (lngW / mlngW)
             .ctrl.Height = .Height * (lngh / mlngh)
             
             
             If .FontSize > 0 Then
                If (.FontSize * lngf) < 8 Then
                   If (.FontSize * lngf) > 7 Then
                      .ctrl.Font.Size = 7
                   Else
                      .ctrl.Font.Size = .FontSize * lngf
                   End If
                Else
                  .ctrl.Font.Size = .FontSize * lngf
                End If
             End If
          End With
       Next
    End Sub
      

  5.   

    你可以先在800*600的环境下设置好位置。然后就在程序里判断是否是1024*768
    。如果是1024*768。就写一段代码控制在这个环境下的位置就好了。
    你的stattusbar在右键菜单中选择移至顶层就好了。
      

  6.   

    谢谢金,这个API确实能得到分辨率的大小.
    非常感谢你给我的代码,改了一下可以用.spfanghong的代码让我掌握了一种新的方法,再次感谢!
    但还有一个问题?
    如何能保证我的treeview和vercitalMenu拖拉时同步?即本来它们的width是相等的.
    请回答看看,如果可以的话请帮帮忙!!
    对了,bjiao确实可以让statusbar置前,谢谢!!
      

  7.   

    你说的拖拉同步是什么意思?是不是用SPLITER那种效果?
      

  8.   

    我不知道spliter,就是指拖拉一个控件另一个控件也有同样的动作.
    即保持一致.