在窗口中动态创建了组件MFCTabCtrl, 现在需要捕获并处理该组件的Active-Change事件;
class CDlgRuleEdit : public CDialogEx
{
public:
CMFCTabCtrl m_tabMain;
}
//在父窗口中捕获消息并处理
//要捕获的消息为
// AFX_WM_CHANGING_ACTIVE_TAB //TabCtrl准备切换Page;
// AFX_WM_CHANGING_ACTIVE_TAB //TabCtrl切换Page完毕;
BEGIN_MESSAGE_MAP(CDlgRuleEdit, CDialogEx)
ON_REGISTERED_MESSAGE(AFX_WM_CHANGING_ACTIVE_TAB, &CDlgRuleEdit::OnAfxWmChangingActiveTab)
ON_REGISTERED_MESSAGE(AFX_WM_CHANGE_ACTIVE_TAB, &CDlgRuleEdit::OnAfxWmChangeActiveTab)
END_MESSAGE_MAP()
BOOL CDlgRuleEdit::OnInitDialog()
{
...
//创建MFCTabCtrl组件;
if( !m_tabMain.Create( CMFCTabCtrl::STYLE_3D_ROUNDED, rc, this, ID_TABPAGES ) )
{
TRACE0("未能创建输出选项卡窗口\n");
return -1; // 未能创建
}
m_tabMain.ModifyStyle(0,WS_CHILD|WS_VISIBLE|WS_BORDER);
...
//向其中添加Page;(每个Page对应一个Dlg(style=Child))
m_tabMain.AddTab(&m_pgRule, _T("规则定义"), (UINT)1);
...
//调整尺寸, 设置初始Page, 显示;
GetClientRect(rc);
m_tabMain.SetWindowPos( NULL, rc.left+BORDERSPAN, rc.top+BORDERSPAN, rc.Width()-BORDERSPAN*2, rc.Height()-64, SWP_NOACTIVATE | SWP_NOZORDER);
m_tabMain.SetActiveTab(0);
...
}
/**Received AFX_WM_CHANGING_ACTIVE_TAB from MFCTabCtrol child.*/
LRESULT CDlgRuleEdit::OnAfxWmChangingActiveTab(WPARAM wParam, LPARAM lParam)
{
...
return 0L;
}
/**Received AFX_WM_CHANGE_ACTIVE_TAB from MFCTabCtrol child.*/
LRESULT CDlgRuleEdit::OnAfxWmChangeActiveTab(WPARAM wParam, LPARAM lParam)
{
//int nn = m_tabMain.GetActiveTab();
...
return 0L;
}