更改消息路由Command
来源:互联网 发布:php 阿里大于短信接口 编辑:程序博客网 时间:2024/05/27 06:12
MFC中Command消息包含菜单工具栏等命令消息和控件的Notify消息,其消息流动比较复杂。
大体概括如下,
系统维护 窗口句柄和对象指针的表,VIEW或者Frame类产生消息找到相应的指针调用 OnCommand 其中改写了OnCommand函数的有CWnd CFrameWnd CMDIFrameWnd....
首先感受到CMD消息,也就是父窗口,但是父窗口没有查路由表,相应消息,而是转入虚函数 OnCmdMsg 这个时候要看this指向 Frame View Document等
如果是Frame那么一定主窗口的对象指针,如果主窗口没有重载OnCmdMsg就调用CFrameWnd的虚函数,
这个是CFrame流向
CFrameWnd::OnCmdMsg(nID,nCode,NULL,NULL)
{
顺序
CView* pView = GetActiveView();
return pView->OnCmdMsg(); 流向View Document Document流向 Document DocTemp
return CWnd::OnCmdMsg();
AfxGetApp()->OnCmdMsg();
}
那我们要改变消息流向,或者截获消息,
肯定要重载OnCommand函数
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
int nCmdID = LOWORD(wParam);
int nCode = HIWORD(wParam);
if(nCmdID == IDM_TEST_0)
{
CWnd::OnCmdMsg(nCmdID,nCode,NULL,NULL);
}
return CFrameWnd::OnCommand(wParam, lParam);
}
或者OnCmdMsg
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
if(nID == IDM_TEST_0)
{
return CWnd::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);
}
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
实质就是改变CFrameWnd中三个函数顺序,或者删除
CView* pView = GetActiveView();
return pView->OnCmdMsg();
CWnd::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);
AfxGetApp()->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);
- 更改消息路由Command
- MFC 命令和消息路由 (command and message route)
- WM_COMMAND消息路由
- 命令消息路由
- SIP消息路由机制
- SIP消息路由机制
- SIP消息路由
- SIP消息路由机制
- SIP消息源路由
- sip消息的路由
- Mule的消息路由
- Mule的消息路由
- MFC中的消息路由
- Mule的消息路由
- MFC的消息路由
- SIP消息路由
- Mule的消息路由
- 深入浅出MFC:消息路由
- STM32中断与事件
- 【IT书籍分享群】新浪微薄群
- 独家新闻:雅虎云主管离职,现担任Battery Ventures的(EIR)入驻企业家
- jQuery 程序员速成二 之 选择器
- ZOJ 1298 Domino Effect【dijkstra】
- 更改消息路由Command
- C++的未来,以及未来的未来
- 自定义TabHost,TabWidget样式
- MyEclipse输入代码打点都没有没有提示的解决办法
- USACO 1.1 Friday the Thirteenth
- jQuery 程序员速成一 之 简介
- linux tomcat 8005解决办法
- mysql常用函数
- jQuery 程序员速成三 之 AJAX