TabControl的使用
(1)新建MFC-Dialog对话框工程;
(2)拖拽TabControl,新建变量m_tabCtl和其关联;
(3)新建两Dialog对话框,对话框属性设置为style=child,Border=None,关联类CDlg1,CDlg2;
(4)在主程序中,新建两对话框的成员变量,m_dlg1,m_dlg2;
(5)OnInitDialog()加入如下代码;
(6)添加ONSelchange的函数
OnInitDialog()函数
// TODO: Add extra initialization here
// 标签控件客户区的位置和大小
CRect tabRect;
// 插入标签页
m_tabCtl.InsertItem(0, _T("第一个标签页"));
m_tabCtl.InsertItem(1, _T("第二个标签页"));
// 创建标签页
m_dlg1.Create(IDD_DLG_1, &m_tabCtl);
m_dlg2.Create(IDD_DLG_2, &m_tabCtl);
// 获取标签客户区
m_tabCtl.GetClientRect(&tabRect);
// 调整标签客户区,使其大小适合放置标签页
tabRect.left += 0;
tabRect.top += 20;
tabRect.right -= 0;
tabRect.bottom -= 0;
// 放置对话框1并设置为显示
m_dlg1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
// 设置对话框2并设置为隐藏
m_dlg2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
TcnSelchange选择
void CToolIntegrationDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
CRect tabRect; // 标签控件客户区的Rect
// 获取标签控件客户区Rect,并对其调整,以适合放置标签页
m_tabCtl.GetClientRect(&tabRect);
tabRect.left += 0;
tabRect.top += 20;
tabRect.right -= 0;
tabRect.bottom -= 0;
// 显示隐藏控制
switch ( m_tabCtl.GetCurSel() )
{
case 0:
m_dlg1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
m_dlg2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
case 1:
m_dlg1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_dlg2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
default:
break;
}
}
附说明:Style 的三个属性
1、
OVERLAPPED --> 重叠窗口
popup ---> 弹出式窗口
child --> 子窗口
2、
overlappedwindow,从窗口关系的角度,可独立存在。
child窗口,依附于parentwindow窗口,随parentwindow存在而存在,显示在parent内部
Popup窗口,弹出窗口,依附于parentwindow窗口,随parentwindow存在而存在, 相对于parentwindow位置可超过边界。
3、
WS_CHILD Creates a child window. Cannot be used with the WS_POPUP style.
WS_POPUP Creates a pop-up window. Cannot be used with the WS_CHILD style.
WS_OVERLAPPED Creates an overlapped window. An overlapped window usually has a caption and a border.
注意:在创建非模态窗口时,把属性设置为overlapped
参考路径:https://blog.csdn.net/q357010621/article/details/52116752