如何阻止我的 MFC 应用程序在启动时调用 OnFileNew()?
Posted
技术标签:
【中文标题】如何阻止我的 MFC 应用程序在启动时调用 OnFileNew()?【英文标题】:How can I stop my MFC application from calling OnFileNew() when it starts? 【发布时间】:2008-10-09 14:41:31 【问题描述】:我使用 Visual Studio 的应用程序向导创建了一个具有多文档界面的骨架 MFC 程序。当我启动这个程序时,它会自动创建一个子框架,我不希望它这样做 - 我需要主框架的客户区为空,直到用户选择打开一个文件。
调试器告诉我,当应用程序类的 InitInstance() 函数调用 ProcessShellCommand() 时,会创建一个 CChildFrame 对象,但什么是我重写此行为的好入口点?
【问题讨论】:
【参考方案1】:这有效,它保持从外壳等打印/打开。
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if ( cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew )
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ;
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
【讨论】:
我认为这相当于 jeffm 的回答。它更长但更清晰,更接近我最终所做的。【参考方案2】:这对我有用——改变
if (!ProcessShellCommand(cmdInfo))
到
if (cmdInfo.m_nShellCommand != CCommandLineInfo::FileNew && !ProcessShellCommand(cmdInfo))
在您应用的 InitInstance() 函数中。
【讨论】:
有效!但是完全跳过 ProcessShellCommand() 会产生不良后果吗?那个函数有什么作用? (我未能在我的项目中找到它的定义。) 我在 Visual Studio 文档中查找了它,看起来函数所做的只是处理参数,所以这很棒。再次感谢。 因为您只是跳过了“FileNew”命令,无论如何您都不想在启动时执行此命令,所以我认为这不会有问题。您仍在处理其他命令,因此我认为如果您传递文件名以在命令行上打开它,它仍然可以工作。 (但我没试过。)【参考方案3】:在 InitInstance() 中跳过 ProcessShellCommand() 调用(在 FileNew 的情况下)确实是要走的路。
【讨论】:
【参考方案4】:做一件事..
在您的 XXXApp.cpp 文件中
在这个方法中:-
评论以下行.. /*
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line. Will return FALSE if
// app was launched with /RegServer, /Register, /Unregserver or /Unregister.
if (!ProcessShellCommand(cmdInfo))
return;
*/
像这样……
【讨论】:
以上是关于如何阻止我的 MFC 应用程序在启动时调用 OnFileNew()?的主要内容,如果未能解决你的问题,请参考以下文章
MFC:当没有选项卡存在时,如何绘制 CTabView 背景?