热情软件屋

 

修改了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集成的辅助工具"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio