包含tab控件时,,如何让子控件跟随对话框大小变化(下)
来源:互联网 发布:mac手机地址怎么查 编辑:程序博客网 时间:2024/05/29 13:22
前面是tab控件的编写,真正resize的编写则在此处。
其中m_point是记录上一次的窗口坐标的变量
voidCMTSWDlg::Resize(){ floatfsp[2];CRectrect;PointNewPoint; GetWindowRect(&rect);NewPoint.X = rect.right - rect.left;NewPoint.Y = rect.bottom - rect.top;fsp[0] = (float)NewPoint.X/m_point.X;fsp[1] = (float)NewPoint.Y/m_point.Y;intnID;CPoint OldTLPoint,TLPoint; //左上角CPoint OldBRPoint,BRPoint; //右下角CRectrectChild;HWNDhwndChild = ::GetWindow(m_hWnd,GW_CHILD);while (hwndChild){nID = ::GetDlgCtrlID(hwndChild);GetDlgItem(nID)->GetWindowRect(rectChild);ScreenToClient(rectChild);OldTLPoint = rectChild.TopLeft();TLPoint.x = long(OldTLPoint.x*fsp[0]);TLPoint.y = long(OldTLPoint.y*fsp[1]);OldBRPoint = rectChild.BottomRight();BRPoint.x = long(OldBRPoint.x*fsp[0]);BRPoint.y = long(OldBRPoint.y*fsp[1]);rectChild.SetRect(TLPoint,BRPoint);GetDlgItem(nID)->MoveWindow(rectChild,TRUE);if (nID == IDC_TAB)//when it's tabctrl,we need to resize the views inside the tabctrl{ViewResize(&rectChild);}hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT); }m_point = NewPoint;}void CMTSWDlg::OnSize(UINT nType, int cx, int cy){CDialog::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码 if(m_TabCtrl){Resize();}}由于有tab控件,所以单独对其也进行了处理,将其视图也进行重新调整大小,其整体思路,是将标签页的坐标拿来使用,删减其高度,就可以令内部视图无缝显示,否则要么覆盖了标签页,要么会有留白
voidCMTSWDlg::ViewResize(LPRECTlpRect){CRectrect ;m_TabCtrl.GetItemRect(0,&rect);intnHeight = rect.Height();//标签页的高度intnY = rect.bottom;intnX = rect.left;((CWnd*)m_TabCtrl.GetCurPage())->GetWindowRect(&rect);ScreenToClient(&rect);CPoint OldTLPoint; //左上角CPoint OldBRPoint; //右下角#if 0OldTLPoint.x = lpRect->left;OldTLPoint.y = lpRect->top - nHeight;//整个tabctrl控件-标签页高度OldBRPoint.x = lpRect->right;OldBRPoint.y = lpRect->bottom;rect.SetRect(OldTLPoint,OldBRPoint); rect.OffsetRect(CSize(-lpRect->left,-lpRect->top/2));#endifOldTLPoint.x = nX;OldTLPoint.y = nY;//lpRect->top - nHeight;//整个tabctrl控件-标签页高度OldBRPoint.x = lpRect->right;OldBRPoint.y = lpRect->bottom;rect.SetRect(OldTLPoint,OldBRPoint); ((CWnd*)m_TabCtrl.GetCurPage())->MoveWindow(&rect,TRUE);但是,单单这样还不足够,还得在初始化时进行设置,否则一运行程序,还会有部分留白在,在OnInitDlg中
// TODO: 在此添加额外的初始化代码CRectrectPage,rectDlg;m_pAnalogDlg = new CAnalogSetPage;m_pAnalogDlg->Create(IDD_DLG_ANALOGSET,&m_TabCtrl);m_pCommonDlg = new CCommonSetDlg;m_pCommonDlg->Create(IDD_DLG_COMMONSET,&m_TabCtrl);m_pDigitDlg = new CDigitSetDlg;m_pDigitDlg->Create(IDD_DLG_DIGITSET,&m_TabCtrl);//保存整个对话框大小::GetClientRect(m_hWnd,&rectDlg);ScreenToClient(&rectDlg);m_point.X = rectDlg.right - rectDlg.left;m_point.Y = rectDlg.bottom - rectDlg.top;m_TabCtrl.GetWindowRect(&rectPage);ScreenToClient(&rectPage);m_pointPage.X = rectPage.left - rectPage.right;m_pointPage.Y = rectPage.bottom - rectPage.top;CRectrectItem;m_TabCtrl.GetItemRect(0,rectItem);rectPage.left = rectItem.left;rectPage.top = rectItem.bottom;m_pAnalogDlg->MoveWindow(&rectPage);m_pCommonDlg->MoveWindow(&rectPage);m_pDigitDlg->MoveWindow(&rectPage);m_TabCtrl.AddPage(m_pCommonDlg,(LPTSTR)(LPCTSTR)strTitle[0]);m_TabCtrl.AddPage(m_pDigitDlg,(LPTSTR)(LPCTSTR)strTitle[1]);m_TabCtrl.AddPage(m_pAnalogDlg,(LPTSTR)(LPCTSTR)strTitle[2]); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE之后打开程序,各个控件就可以进行大小变化了,但是,如果还想要tab中view的子控件也同样的进行变化,那么就得在tab中进行重写了
- 包含tab控件时,,如何让子控件跟随对话框大小变化(下)
- 包含tab控件时,,如何让子控件跟随对话框大小变化(上)
- 包含tab控件时,,如何让子控件跟随对话框大小变化(补充)
- 在CFormView中如何让对话框内的控件大小跟随单文档的大小变化
- QT中如何让控件跟随随窗口大小变化
- [MFC] 控件大小跟随对话框大小比例变化 [大三TJB_708]
- [MFC] 控件大小跟随对话框大小比例变化 [大三TJB_708]
- [MFC] 控件大小跟随对话框大小比例变化 [转]
- 如何让TAB控件的子对话框随着TAB的父对话框的最大化而最大化
- 如何让窗口最大化 并让控件跟随变化
- 让对话框内的控件在窗体大小发生变化时随之变化
- 【MFC应用】让对话框内的控件在窗体大小发生变化时随之变化
- 如何让控件随窗体的大小变化而变化
- 控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )
- MFC 控件跟随对话框变化比例变化 笔记
- MFC对话框中的控件随着对话框大小变化而变化
- 对话框控件大小随窗口的大小变化而变化
- 控件随对话框窗体大小而变化
- .NET FTP操作最全,最强的封装模块类
- Apache Options Indexes FollowSymLinks详解
- Android的intent之间复杂参数的传递
- 超酷的杂志翻页效果HTML5实现
- What is a Program?
- 包含tab控件时,,如何让子控件跟随对话框大小变化(下)
- mingw命令行编译示例
- 家乡的小河
- HDU 4293 Groups(12年成都网络赛-F题-DP)
- 编程技能和做员工的技能——哪个更重要?
- Unicode编码相关的一个标准----UTF8
- hibernate lazy(延迟加载) 的使用
- paip.SOCKET抓包工具总结V2012.9.17
- 奢望