这个问题折磨了我两天。先说子对话框如何和tab空间关联的:
m_tabctl.InsertItem(0, _T("扫描"));
m_tabctl.InsertItem(1, _T("扫描选项"));
m_pagechoice.Create(IDD_DIALOGCHOICE, &m_tabctl);//创建两个对话框,父亲为列表控件
m_pagescan.Create(IDD_DIALOGSCAN, &m_tabctl);
m_pagescan.pChoice = &m_pagechoice;
INIT_EASYSIZE;
SetWindowPos((CWnd*)&m_hWnd, 0, 0, 800, 600, SWP_SHOWWINDOW);
//CRect rctab, reItem;
m_tabctl.GetClientRect(&rctab);//让两个对话框填充整个TAB空间区域
m_nWidth = rctab.left-rctab.right;
m_nHeight = rctab.bottom-rctab.top;
m_tabctl.GetItemRect(0,&reItem);
rctab.DeflateRect(0, reItem.bottom, 0,0);
m_pagescan.MoveWindow(&rctab);
m_pagechoice.MoveWindow(&rctab);
pDialog[0]=&m_pagescan;
pDialog[1] = &m_pagechoice;
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
m_CurSelTab = 0;
至于对话框中的控件如何随着对话框的变化而变化,我们使用EASYSIZE, 大家可以上网查查,有很多介绍,这里就不再说了。
最后说一下TAB控件的子对话框如何随着TAB的父对话框的最大化而最大化,这个问题,这个问题困扰了我两天。最后终于找到了方法。
首先在主对话里增加WM_SIZE处理消息,在函数中添加如下代码:
UPDATE_EASYSIZE;
if(m_pagescan.GetSafeHwnd() && m_pagechoice.GetSafeHwnd()){//一定要加上此个判断,否则会出现段错误,因为第一次调用的时候两个子对话框的句柄还没有。
m_tabctl.GetClientRect(&rctab);
//ScreenToClient(rctab);
m_nWidth = rctab.left-rctab.right;
m_nHeight = rctab.bottom-rctab.top;
m_tabctl.GetItemRect(0,&reItem);
rctab.DeflateRect(0, reItem.bottom, 0,0);
m_pagescan.MoveWindow(&rctab);
m_pagechoice.MoveWindow(&rctab);
}
最后的工作就是利用EASY_SIZE在每个子对话框里最每个对话框的控件在WM_SIZE消息里进行处理了,就不再多说。