我想把窗体的大小限定为桌面的大小,不包含任务栏的高度,当任务栏隐藏后,自动的充满整个屏幕!
  这种做法和取得桌面客户端的大小是否效果一样,有什么区别??怎样取得?
  谢谢!

解决方案 »

  1.   

    用API,好像是这个
    GetWindowRect()
      

  2.   

    还有,要用FindWindow(),找类名为 Shell_TrayWnd 的窗口,那就是任务栏的hwnd,再用GetWindowRect得到它的高度等.
      

  3.   

    SystemParametersInfo可以得到除所有taskbar之外的桌面空间。
      

  4.   

    说错了,是taskbar和其它appbar
    还有一个getsystemmetrics
      

  5.   

    SystemParametersInfo, SystemParametersInfoByval VB声明 
    Declare Function SystemParametersInfo& Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
    Declare Function SystemParametersInfoByVal& Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) 
    说明 
    允许获取和设置数量众多的windows系统参数 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    uAction Long,指定要设置的参数。参考uAction常数表 
    uParam Long,参考uAction常数表 
    lpvParam Any,按引用调用的Integer、Long和数据结构。对于String数据,请用SystemParametersInfoByval函数。具体用法参考uAction常数表 
    fuWinIni Long,取决于不同的参数及操作系统,随同这个函数设置的用户配置参数保存在win.ini或注册表里,或同时保存在这两个地方。这个参数规定了在设置系统参数的时候,是否应更新用户设置参数。可以是零(禁止更新),或下述任何一个常数: 
    SPIF_UPDATEINIFILE 更新win.ini和(或)注册表中的用户配置文件 
    SPIF_SENDWININICHANGE 倘若也设置了SPIF_UPDATEINIFILE,将一条WM_WININICHANGE消息发给所有应用程序。否则没有作用。这调消息告诉应用程序已经改变了用户配置设置 
    注解 
    在调用这个函数之前,特别要注意将lpvParam参数定义成正确的数据类型 SPI_GETWORKAREA lpvParam是一个RECT结构,用于装载屏幕的工作区 
      

  6.   

    Option ExplicitPrivate Declare Function SHAppBarMessage Lib "shell32.dll" _
       (ByVal dwMessage As Long, pData As APPBARDATA) As LongPrivate Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypePrivate Type APPBARDATA
        cbSize As Long
        hwnd As Long
        uCallbackMessage As Long
        uEdge As Long
        rc As RECT
        lParam As Long
    End TypePrivate Const ABM_GETTASKBARPOS = &H5Private Sub Form_Load()
        Dim BD As APPBARDATA
        
        BD.cbSize = Len(BD)
        Call SHAppBarMessage(ABM_GETTASKBARPOS, BD)
        
        Debug.Print "Left:"; BD.rc.Left, _
                    "Top:"; BD.rc.Top, _
                    "Right:"; BD.rc.Right, _
                    "Bottom:"; BD.rc.Bottom
    End Sub