对话框的伸缩功能
Posted Autumn の Box
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对话框的伸缩功能相关的知识,希望对你有一定的参考价值。
当用户单击“收缩<<”按钮后,将对话框的下半部分切除,并将按钮的文本改为“扩展>>”;当用户再次单击该“扩展>>”按钮后,还原为完整的对话框;
1、先给这个按钮添加命令响应函数,首先实现单击按钮后按钮文本改变的功能
void CTestDlg::OnButton1() { // TODO: Add your control notification handler code here CString str; GetDlgItemText(IDC_BUTTON1,str); if(str=="收缩<<"){ SetDlgItemText(IDC_BUTTON1,"扩展>>"); }else{ SetDlgItemText(IDC_BUTTON1,"收缩<<"); } }
2、在资源窗口中利用图像控件为对话框添加一条分割线,将其ID改为IDC_SEPARATOR,将其样式选中“凹陷”;
3、利用GetWindowRect函数获取对话框的原始位置;当切除分割线以下部分时,对话框的左上角坐标位置和宽度并未改变,变化的只是对话框的右下角的纵坐标;利用GetWindowRect函数获取分割线的大小和坐标位置,而分割线的右下角纵坐标即为收缩后的对话框的右下角坐标;
void CTestDlg::OnButton1() { // TODO: Add your control notification handler code here CString str; GetDlgItemText(IDC_BUTTON1,str); if(str=="收缩<<"){ SetDlgItemText(IDC_BUTTON1,"扩展>>"); }else{ SetDlgItemText(IDC_BUTTON1,"收缩<<"); } static CRect rectLarge; //用于保存对话框的原始尺寸 static CRect rectSmall; //用于保存对话框收缩后的尺寸 if(rectLarge.IsRectEmpty()){ //判断对话框的原始尺寸是否已被赋值 CRect rectSeparator; GetWindowRect(&rectLarge); //获取对话框的原始尺寸 GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator); //获取分割线的位置坐标 rectSmall.left=rectLarge.left; rectSmall.top=rectLarge.top; rectSmall.right=rectLarge.right; rectSmall.bottom=rectSeparator.bottom; //对话框收缩后的右下角纵坐标即为分割线的右下角坐标 } if(str=="收缩<<"){ SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER); }else{ SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NOZORDER); } }
SetWindowPos:设置窗口的位置和大小;
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
pWndInsertAfter:设置当前窗口在Z轴上的位置
x,y:窗口左上角的x,y坐标
cx,cy:窗口的宽度和高度
nFlags:设定窗口的尺寸和Z轴位置;SWP_NOMOVE:维持窗口当前位置,忽略x,y参数;SWP_NOZORDER:维持窗口当前的Z轴位置,忽略pWndInsertAfter参数;
以上是关于对话框的伸缩功能的主要内容,如果未能解决你的问题,请参考以下文章