Mfc 处理ON_注册的_消息,然后继续路由
我需要在注册的消息上处理自己的MFC消息,然后继续默认路由消息。我按如下方式捕获消息,并返回0以转发并继续路由消息。这条路对吗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;
// 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。