窗口的伸缩功能
一、先来看看结构
二、设计
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、调用:
- 初始化函数调用伸缩函数:
ExtendDialog(m_bExtend);
-
点击按钮函数调用伸缩函数:
void CMyChatRoomDlg::OnBnClickedBtnNetSetting() { // TODO: 在此添加控件通知处理程序代码 ExtendDialog(m_bExtend); }
- 初始化函数调用伸缩函数:
总结:
1、当一个功能在多个地方需要被使用时,首先设计时就得将其单独封装起来,以后实践中,我得注意。
2、当一个变量被多个函数所使用,最好将其全局化。