如何更改框架生成的“新建”和“保存”命令? 我想更改框架生成的“新建”和“保存”命令,但是在CChildFrame中映射ID_FILE_OPEN,再设断点看有没有执行到这,结果没有啊,应该怎么更改它的默认行为呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为这些行为都是MFC类的缺省行为。你需要自己呼应这两个命令。 一定要在在CMainFrame中响应这个命令吗?那如果已经打开了一个或多个视后,不就是进入到CChildFrame了吗?如果是这样的话,再按这些命令的话不就是调用了CChildFrame中的响应函数吗?我是新手,请大家指点指点. 在CMDIFrameWnd::OnCreate中创建mdi子窗口。可以在mdi子窗口中添加WM_CREATE的处理,每次默认的新建,打开动作,都会调用他。 去文档类里面重载,新建 保存 都是 CDocument的动作,文档类里提供了接口的 一.创建文档ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)入口:CWinApp::OnFileNewCWinApp对OnFileNew的默认实现是调用:CdocManager::OnFileNew()1.判断有无文档模板,无则函数返回;2.判断是否有多个文档模板,如有则启动文档模板选择对话框,让用户选择一个模板后,返回模板指针.3.由模板指针访问CMultiDocTemplate::OpenDocumentFile()3.1 创建新文档对象3.2 创建与新文档对象对应的子框架,构筑子框架,文档和视窗之间的关系3.3 调用应用程序的OnNewDocument() a.调用CDocument::OnNewDocument() 调用应用程序的DeleteContents(); b.用户代码3.4 调用InitialUpdateFrame()显示视窗3.5 返回文档指针4.返回 利用向导添加“ID_FILE_NEW”的消息函数 1、当没有任何文档被打开时,MFC框架会映射CWinApp中的ID_FILE_NEW2、当文档被打开时,如在文档类中响应ID_FILE_NEW,则MFC会映射到C***Doc中的OnFileNew()3、当然,你也可以在CMainFrame里面映射ID_FILE_NEW // 在MainFrm.cpp文件中:// 这里是消息映射BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_COMMAND(ID_FILE_NEW, CMainFrame::OnFileNew) //映射到CMainFrame的OnFileNew ON_WM_CREATE() // 全局帮助命令 ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder) ON_COMMAND(ID_HELP, CFrameWnd::OnHelp) ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp) ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)END_MESSAGE_MAP() 重载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==ID_FILE_NEW)return false; return CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);}//当然不一定非这样添在这儿, CMainFrame里重载这几个消息不就行了!!! 在CMainFrame重载了,但它不执行我重载的消息处理函数. 如何让子对话框内嵌到父对话框,就是随着移动,坐标相对 托盘菜单不响应OnDrawItem? 谁有Visual C++面向对象编程教程的习题答案 一个很菜的问题? 关于管道的问题! ATL生成的dll怎样转成exe给被人用呢? 调试的时候出现的error 怎样在Edit里面实现高亮的文本显示? 隐藏文件的图标问题?! 还是vc技术内幕上的问题 高分求救:文件读取问题 如何让不同控件的同一个事件,调用同个函数,在线等待?????
那如果已经打开了一个或多个视后,不就是进入到CChildFrame了吗?
如果是这样的话,再按这些命令的话不就是调用了CChildFrame中的响应函数吗?
我是新手,请大家指点指点.
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
入口:CWinApp::OnFileNew
CWinApp对OnFileNew的默认实现是调用:CdocManager::OnFileNew()
1.判断有无文档模板,无则函数返回;
2.判断是否有多个文档模板,如有则启动文档模板选择对话框,让用户选择一个模板后,返回模板指针.
3.由模板指针访问CMultiDocTemplate::OpenDocumentFile()
3.1 创建新文档对象
3.2 创建与新文档对象对应的子框架,构筑子框架,文档和视窗之间的关系
3.3 调用应用程序的OnNewDocument()
a.调用CDocument::OnNewDocument()
调用应用程序的DeleteContents();
b.用户代码
3.4 调用InitialUpdateFrame()显示视窗
3.5 返回文档指针
4.返回
2、当文档被打开时,如在文档类中响应ID_FILE_NEW,则MFC会映射到C***Doc中的OnFileNew()
3、当然,你也可以在CMainFrame里面映射ID_FILE_NEW
// 这里是消息映射BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND(ID_FILE_NEW, CMainFrame::OnFileNew) //映射到CMainFrame的OnFileNew
ON_WM_CREATE()
// 全局帮助命令
ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder)
ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
END_MESSAGE_MAP()
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==ID_FILE_NEW)return false;
return CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
//当然不一定非这样添在这儿,