实战经验:如何检测CMFCTabCtrl控件标签页切换事件

实战经验:如何检测CMFCTabCtrl控件标签页切换事件

作者:BlogUpdater |  时间:2017-04-18 |  浏览:3733 |  评论已关闭 条评论

MFC库中经常会使用到的一个控件是Tab标签页控件,这个控件在展现多个平级数据集非常合适。
与控件对应的,是MFC库中的两个类:CMFCTabCtrl和CMFCBaseTabCtrl,其中CMFCTabCtrl继承自CMFCBaseTabCtrl,而CMFCBaseTabCtrl又继承自CWnd。
开发应用程序过程中会有一个需求:Tab标签页何时进行了切换?

下面介绍两个消息:

AFX_WM_CHANGING_ACTIVE_TAB
MSDN描述为:Sent to the parent of CMFCTabCtrl object. Process this message if you want to receive notifications from CMFCTabCtrl objects when a user resets a tab.

也即:收到该消息时,标签页还没有完成切换,只是准备切换。

该消息处理函数原型如下:

afx_msg LRESULT OnActiveTabChanging(WPARAM wParam, LPARAM lParam);

我们可以通过LPARAM获取当前的CMFCTabCtrl控件类,也可以通过WPARAM获取准备被激活的标签页索引。

AFX_WM_CHANGE_ACTIVE_TAB
MSDN描述为:The framework sends this message to the resizable control bar control. Process this message to receive notifications from CMFCTabCtrl objects when a user changes an active tab.

也即:收到该消息时,标签页已完成切换。

该消息处理函数原型如下:

afx_msg LRESULT OnActiveTabChanged(WPARAM wParam, LPARAM lParam);

我们可以通过LPARAM获取当前的CMFCTabCtrl控件类,也可以通过WPARAM获取已激活的标签页索引。

以下是通用处理代码:

AFX_WM_CHANGING_ACTIVE_TAB处理函数:

/************************************************************************
* Message: AFX_WM_CHANGING_ACTIVE_TAB
************************************************************************/
LRESULT CMyDialog::OnActiveTabChanging(WPARAM wParam, LPARAM lParam)
{
    CMFCTabCtrl * tabCtrl = reinterpret_cast<CMFCTabCtrl *>(lParam);
    int indexActive = static_cast<int>(wParam);

    return 0;
}

AFX_WM_CHANGE_ACTIVE_TAB处理函数:

/************************************************************************
* Message: AFX_WM_CHANGE_ACTIVE_TAB
************************************************************************/
LRESULT CMyDialog::OnActiveTabChanged(WPARAM wParam, LPARAM lParam)
{
    CMFCTabCtrl * tabCtrl = reinterpret_cast<CMFCTabCtrl *>(lParam);
    int indexActive = static_cast<int>(wParam);

    return 0;
}
标签:

评论已关闭。