修改了CWinApp的函数后重新编译,无法使新加上的内容生效
编号:QA003846
建立日期: 2001年2月6日 最后修改日期:2001年2月6日
所属类别:
谭登丰:
操作系统: win98
编程工具: vc6.0
问题: 我在跟踪MDI程序的文件菜单下的新文件时,进入下面函数:
(它属于...\vc98\mfc\src\appdlg.cpp)
void CWinApp::OnFileNew()
{
if (m_pDocManager != NULL)
m_pDocManager->OnFileNew();
}
之后,我在上面函数中加上新内容,如下:
然后使用VC6.0的Build菜单下的任何一种编译命令重新编译,运行结果表明,无法使新加上的内容生效。
void CWinApp::OnFileNew()
{
return;//新加
if (m_pDocManager != NULL)
m_pDocManager->OnFileNew();
}
声明:本人不是简单地想实现屏蔽菜单--新文件的功能。而是想寻找一种编程捷径(只需稍为修改VC6.0自带的.CPP,.H等等,就可实现自己的目的)。因为我认为,既然VC6.0允许我们象跟踪自己写的程序一样跟踪它自带的.CPP,.H文件.它应该会提供一种方法使我们所作的修改生效。
希望知道个中因果的高手露两招,为VC编程者造福。本人先行致谢!!!
水平: 中级
回答:
我不太了解你所说的“寻找一种编程捷径”的确切含义,但是象你这样做是错误的。
你直接修改CWinApp,那么简单地编译你的MDI工程是无用的。你要想起作用,必须重新编译整个MFC类库,然后使用你的类库替换掉MFC42.DLL和相关的静态.lib文件。这显然是危险的,因为除了微软,VC++的开发者都不能这样做,而且这样你的程序将会和现有的大量程序冲突,而且当你换一台机器,你就需要做一次,太麻烦了。我看不出你的方法有什么好处。
C++的最大优点就是可以重载,这样你可以在不修改基类(甚至没有相关代码)的情况下添加自己的功能,为什么不在你的MDI工程中重载App类的OnFileNew()函数呢?
也可能你要加的功能确实很有用,经常需要用到,那么你可以把你修改后的工程存为模板,使用Custom AppWizard建立你自己的AppWizard,以后每次建立新工程时根据这个模板生成代码。这样做肯定比你的方法好。
相关问题:
QA001216 "如何写一个与VC++ Studio集成的辅助工具"
此问题由李海回答。
| |
|
|
| |
|
|