none
请问,如何捕获CTabView的Tab激活消息? RRS feed

  • 问题

  • 看过Feature Pack2008中的CTabCtrl可以捕获AFX_WM_CHANGE_ACTIVE_TAB来响应。

    我目前的情况是在一个CView的派生类中有一个成员变量CTabView *m_pTabView,我想当Tab发生改变时捕获到该事件:

    TaskViewSCOMP.h


    afx_msg LRESULT OnChangeActiveTab(WPARAM wParam, LPARAM lParam);
    CTabView*  m_pTabView;

     

    TaskViewSCOMP.cpp

    BEGIN_MESSAGE_MAP(CTaskViewSCOMP, CMonitorTaskViewBase)
        ON_REGISTERED_MESSAGE(AFX_WM_CHANGE_ACTIVE_TAB, OnChangeActiveTab)
    END_MESSAGE_MAP()

    但是当单击MFCTabCtrl的一个Tab时,OnChangeActiveTab函数并没有被触发,请问该如何实现呢?是不是这个消息只能在CMFCTabCtrl控件的父窗口(CTabView中也就是CTabView窗口)捕获到?我目前需要在CTabView的父窗口(也就是CTaskViewSCOMP)捕获。

    谢谢!

    2011年5月16日 2:25

答案

全部回复

  • CMFCTabCtrl::SetActiveTab 
    virtual BOOL SetActiveTab(
      int iTab 
    );


    This method does not send the AFX_WM_CHANGE_ACTIVE_TAB notification to the parent window of the tab control.


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月16日 5:19
    版主
  • 请问该如何解决呢?

    是不是只能采用CMFCTabCtrl类来添加窗口,而不能采用CTabView类来添加窗口?

    2011年5月16日 5:33
  • 解决办法:重载CTabView,重载OnActivateView(CView* pView)虚函数,发送消息到父窗口
    2011年5月16日 6:47