Mfc 处理ON_注册的_消息,然后继续路由

Mfc 处理ON_注册的_消息,然后继续路由,mfc,Mfc,我需要在注册的消息上处理自己的MFC消息,然后继续默认路由消息。我按如下方式捕获消息,并返回0以转发并继续路由消息。这条路对吗 // Tab control notifications ON_REGISTERED_MESSAGE(AFX_WM_CHANGE_ACTIVE_TAB, OnChangeActiveTab) LRESULT CCMyTabView::OnChangeActiveTab(WPARAM wp, LPARAM /*lp*/) { CString str;

我需要在注册的消息上处理自己的MFC消息,然后继续默认路由消息。我按如下方式捕获消息,并返回0以转发并继续路由消息。这条路对吗

// Tab control notifications
ON_REGISTERED_MESSAGE(AFX_WM_CHANGE_ACTIVE_TAB, OnChangeActiveTab)      

LRESULT CCMyTabView::OnChangeActiveTab(WPARAM wp, LPARAM /*lp*/)
{
  CString str;
  str.Format(_T("AFX_WM_CHANGE_ACTIVE_TAB: %d"), (int)wp);
  // TRACE(str);
  return 0;
}

要获得默认处理,需要调用基类实现。所以不是
返回0语句,返回从基类实现返回的值。假设
CMyTabView
是从中派生的,则以下实现可以:

LRESULT CCMyTabView::OnChangeActiveTab(WPARAM wp,LPARAM lp){
CString-str;
str.Format(_T(“AFX\u WM\u CHANGE\u ACTIVE\u TAB:%d”),(int)wp);
//微量元素(str);
返回CTabView::OnChangeActiveTab(wp,lp);
}
如果您使用的是Visual Studio,并且不关心可移植性,那么为了方便起见,可以使用关键字:

return\uuuu super::OnChangeActiveTab(wp,lp);

要获得默认处理,需要调用基类实现。所以不是
返回0语句,返回从基类实现返回的值。假设
CMyTabView
是从中派生的,则以下实现可以:

LRESULT CCMyTabView::OnChangeActiveTab(WPARAM wp,LPARAM lp){
CString-str;
str.Format(_T(“AFX\u WM\u CHANGE\u ACTIVE\u TAB:%d”),(int)wp);
//微量元素(str);
返回CTabView::OnChangeActiveTab(wp,lp);
}
如果您使用的是Visual Studio,并且不关心可移植性,那么为了方便起见,可以使用关键字:

return\uuuu super::OnChangeActiveTab(wp,lp);

我刚刚为MFC搜索了源代码。。。所以,我的猜测是,既然类的名称中有“View”,那么它就是从CTabView派生的。如果是这种情况,则调用CTabView::OnChangeActiveTab()

你也可以这样做

__super::OnChangeActiveTab(wp, lp);

我刚把MFC的源代码删掉了。。。所以,我的猜测是,既然类的名称中有“View”,那么它就是从CTabView派生的。如果是这种情况,则调用CTabView::OnChangeActiveTab()

你也可以这样做

__super::OnChangeActiveTab(wp, lp);
在为类定义成员函数的实现(.cpp)文件中,使用BEGIN_message_map宏启动消息映射,然后为每个消息处理程序函数添加宏项,并使用END_message_map宏完成消息映射

            // example for ON_REGISTERED_MESSAGE
            const UINT    wm_Find = RegisterWindowMessage( UINT_MESSAGE )

            BEGIN_MESSAGE_MAP( CMyWnd, CWndClass )
                //{{AFX_MSG_MAP( CMyWnd )
                ON_REGISTERED_MESSAGE( wm_Find, OnFind )
                //}}AFX_MSG_MAP
            END_MESSAGE_MAP( )

            LRESULT OnFind (WPARAM,LPARAM)
            {
                return 0;
            }
在为类定义成员函数的实现(.cpp)文件中,使用BEGIN_message_map宏启动消息映射,然后为每个消息处理程序函数添加宏项,并使用END_message_map宏完成消息映射

            // example for ON_REGISTERED_MESSAGE
            const UINT    wm_Find = RegisterWindowMessage( UINT_MESSAGE )

            BEGIN_MESSAGE_MAP( CMyWnd, CWndClass )
                //{{AFX_MSG_MAP( CMyWnd )
                ON_REGISTERED_MESSAGE( wm_Find, OnFind )
                //}}AFX_MSG_MAP
            END_MESSAGE_MAP( )

            LRESULT OnFind (WPARAM,LPARAM)
            {
                return 0;
            }

这个问题与注册信息上的
有什么关系?请提供一个(并尽量减少)。我的主要语言不是英语。我改变了题目,尽我最大的努力来改进这个问题。我恢复了我以前的答案,尽管我仍然不明白,你在追求什么。它甚至可能无法解决您提出的问题。目的很简单,就是在用户更改视图或文档后更新输出窗格。此问题与注册消息上的
有何关系?请提供一个(并尽量减少)。我的主要语言不是英语。我改变了题目,尽我最大的努力来改进这个问题。我恢复了我以前的答案,尽管我仍然不明白,你在追求什么。它甚至可能无法解决您提出的问题。其目的很简单,就是在用户更改视图或文档后更新输出窗格。这是可行的,但在我的案例中不是enoug。对于MDI文档,我必须将处理程序移动到CMainframe。这是可行的,但在我的例子中不是enoug。对于MDI文档,我必须将处理程序移动到CMainframe。