窗口的伸缩功能

一、先来看看结构

二、设计

   1、设计一个成员函数,实现伸缩功能。

    其目的:

      •  初始化时可以被初始化函数调用
      •    点击按钮响应时可以被按钮函数调用

  2、相应的是,这时也必须设计一个成员变量,保存伸缩状态。其目的与设计成员函数相似。

三、实现

  1、声明:

public:
    afx_msg void OnBnClickedBtnNetSetting();
    void ExtendDialog(bool &bExtend);
private:
    bool m_bExtend; 

   2、初始化成员变量:

m_bExtend = false;

  3、伸缩函数的定义:

void CMyChatRoomDlg::ExtendDialog(bool &bExtend)
{
    static CRect largeRect;
    static CRect smallRect;
    static CRect largeFrameRect;
    static CRect smallFrameRect;
    CRect tempRect;

    if (largeRect.IsRectEmpty())
    {
        GetWindowRect(&largeRect);
        GetDlgItem(IDC_STATIC_SEPERATOR)->GetWindowRect(&tempRect);
        smallRect = largeRect;
        smallRect.right = tempRect.right;

        GetDlgItem(IDC_STATIC_CHATROOM)->GetWindowRect(&largeFrameRect);
        smallFrameRect = largeFrameRect;
        smallFrameRect.right = tempRect.right -20;
    }


    if (!bExtend)
    {
        SetWindowPos(NULL,0,0,smallRect.Width(),smallRect.Height(),SWP_NOMOVE|SWP_NOZORDER);
        GetDlgItem(IDC_STATIC_CHATROOM)->SetWindowPos(NULL,0,0,smallFrameRect.Width(),smallFrameRect.Height(),SWP_NOMOVE|SWP_NOZORDER);
        bExtend = true;
    }
    else
    {
        SetWindowPos(NULL,0,0,largeRect.Width(),largeRect.Height(),SWP_NOMOVE|SWP_NOZORDER);
        GetDlgItem(IDC_STATIC_CHATROOM)->SetWindowPos(NULL,0,0,largeFrameRect.Width(),largeFrameRect.Height(),SWP_NOMOVE|SWP_NOZORDER);
        bExtend = false;
    }
}

  4、调用:

    1.  初始化函数调用伸缩函数:
      ExtendDialog(m_bExtend);
    2.    点击按钮函数调用伸缩函数:

      void CMyChatRoomDlg::OnBnClickedBtnNetSetting()
      {
          // TODO: 在此添加控件通知处理程序代码
          
          ExtendDialog(m_bExtend);
          
      }


       

总结:

  1、当一个功能在多个地方需要被使用时,首先设计时就得将其单独封装起来,以后实践中,我得注意。

  2、当一个变量被多个函数所使用,最好将其全局化。

原文地址:https://www.cnblogs.com/aoguren/p/3188707.html