就像有些对话框,当点了按钮后就会展开,再点后就会收缩,请问要怎样实现?急!

解决方案 »

  1.   

    你运气真好,前几天做项目,刚刚做了这一块,给源码给你看看。
    static CRect rectLarge;
        static CRect rectSmall;
        
        if(rectLarge.IsRectNull())
        {
            CRect rectSeparator;
            GetWindowRect(&rectLarge);
            GetDlgItem(IDC_STATIC_LINE)->GetWindowRect(&rectSeparator);
            
            rectSmall.left=rectLarge.left;
            rectSmall.top=rectLarge.top;
            rectSmall.right=rectSeparator.right;
            rectSmall.bottom=rectSeparator.bottom;
        }
      if(m_bCheckAlarm!=false)
        {
            SetWindowPos(NULL,rectSmall.left,rectSmall.top,rectLarge.Width()-17,rectLarge.Height(),
    }
    else
    {
    SetWindowPos(NULL,rectSmall.left,rectSmall.top,rectSmall.Width(),rectSmall.Height(),
    SWP_NOMOVE | SWP_NOZORDER);
    }
    在你伸缩的地方,加一个控件(让他隐),取他的坐标,就可以了。
      

  2.   

    bool 型全局变量 d,m_bCheckAlarm
    static CRect rectLarge;
        static CRect rectSmall;
        if(d)
    {
          GetWindowRect(&rectLarge);//large中保存原始的位置信息
          //GetDlgItem(IDC_STATIC_LINE)->GetWindowRect(&rectSmall);//隐藏的控件的初始位置信息保存在rectSmall中
      d=false;
    }
      if(m_bCheckAlarm)//初始就是没有变化时,变小
        {
      m_bCheckAlarm=false;
          SetWindowPos(NULL,rectLarge.left,rectLarge.top,rectLarge.Width(),rectLarge.Height()-200,SWP_NOMOVE | SWP_NOZORDER);
      }
    else
    {
     m_bCheckAlarm=true;
         SetWindowPos(NULL,rectLarge.left,rectLarge.top,rectLarge.Width(),rectLarge.Height(),
    SWP_NOMOVE | SWP_NOZORDER);
    }
      

  3.   

    只是觉得用硬编码rectLarge.Height()-200不是很舒服