怎么区分OnNewDocument()函数是谁调用的?

weiwuyuan 2012-12-12 09:26:12
在mfc单文档项目里,程序启动后会调用一次CDocument::OnNewDocument()函数,我怎么判断他是启动时触发的还是用户自己通过单击新建触发的?
启动时的那次调用能屏蔽么?
...全文
376 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiwuyuan 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
引用 3 楼 weiwuyuan 的回复: 引用 1 楼 VisualEleven 的回复: 引用 楼主 weiwuyuan 的回复: 在mfc单文档项目里,程序启动后会调用一次CDocument::OnNewDocument()函数,我怎么判断他是启动时触发的还是用户自己通过单击新建触发的? 启动时的那次调用能屏蔽么? App类的InitInstance函数中调用了ProcessShe……
恩, 我还是用个布尔量标记一下吧
Eleven 2012-12-12
  • 打赏
  • 举报
回复
引用 3 楼 weiwuyuan 的回复:
引用 1 楼 VisualEleven 的回复: 引用 楼主 weiwuyuan 的回复: 在mfc单文档项目里,程序启动后会调用一次CDocument::OnNewDocument()函数,我怎么判断他是启动时触发的还是用户自己通过单击新建触发的? 启动时的那次调用能屏蔽么? App类的InitInstance函数中调用了ProcessShellCommand(cmdInfo); 看第……
MFC的SDI框架就是这样的,没办法,除非你用MDI
weiwuyuan 2012-12-12
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
引用 楼主 weiwuyuan 的回复: 在mfc单文档项目里,程序启动后会调用一次CDocument::OnNewDocument()函数,我怎么判断他是启动时触发的还是用户自己通过单击新建触发的? 启动时的那次调用能屏蔽么? App类的InitInstance函数中调用了ProcessShellCommand(cmdInfo); 看第一个case语句就明白了 C/C++ co……
那就是没办法解决了?
babala2009 2012-12-12
  • 打赏
  • 举报
回复
2楼每次都能回答道点子上
Eleven 2012-12-12
  • 打赏
  • 举报
回复
引用 楼主 weiwuyuan 的回复:
在mfc单文档项目里,程序启动后会调用一次CDocument::OnNewDocument()函数,我怎么判断他是启动时触发的还是用户自己通过单击新建触发的? 启动时的那次调用能屏蔽么?
App类的InitInstance函数中调用了ProcessShellCommand(cmdInfo); 看第一个case语句就明白了

BOOL CWinApp::ProcessShellCommand(CCommandLineInfo& rCmdInfo)
{
	BOOL bResult = TRUE;
	switch (rCmdInfo.m_nShellCommand)
	{
	case CCommandLineInfo::FileNew:
		if (!AfxGetApp()->OnCmdMsg(ID_FILE_NEW, 0, NULL, NULL))
			OnFileNew();
		if (m_pMainWnd == NULL)
			bResult = FALSE;
		break;

		// If we've been asked to open a file, call OpenDocumentFile()

	case CCommandLineInfo::FileOpen:
		if (!OpenDocumentFile(rCmdInfo.m_strFileName))
			bResult = FALSE;
		break;

		// If the user wanted to print, hide our main window and
		// fire a message to ourselves to start the printing

	case CCommandLineInfo::FilePrintTo:
	case CCommandLineInfo::FilePrint:
		m_nCmdShow = SW_HIDE;
		ASSERT(m_pCmdInfo == NULL);
		if(OpenDocumentFile(rCmdInfo.m_strFileName))
		{
			m_pCmdInfo = &rCmdInfo;
			ENSURE_VALID(m_pMainWnd);
			m_pMainWnd->SendMessage(WM_COMMAND, ID_FILE_PRINT_DIRECT);
			m_pCmdInfo = NULL;
		}
		bResult = FALSE;
		break;

		// If we're doing DDE, hide ourselves

	case CCommandLineInfo::FileDDE:
		m_pCmdInfo = (CCommandLineInfo*)(UINT_PTR)m_nCmdShow;
		m_nCmdShow = SW_HIDE;
		break;

	// If we've been asked to register, exit without showing UI.
	// Registration was already done in InitInstance().
	case CCommandLineInfo::AppRegister:
		{
			Register();			
			bResult = FALSE;    // that's all we do

			// If nobody is using it already, we can use it.
			// We'll flag that we're unregistering and not save our state
			// on the way out. This new object gets deleted by the
			// app object destructor.

			if (m_pCmdInfo == NULL)
			{
				m_pCmdInfo = new CCommandLineInfo;
				m_pCmdInfo->m_nShellCommand = CCommandLineInfo::AppUnregister;
			}
			break;
		}

	// If we've been asked to unregister, unregister and then terminate
	case CCommandLineInfo::AppUnregister:
		{
			BOOL bUnregistered = Unregister();

			// if you specify /EMBEDDED, we won't make an success/failure box
			// this use of /EMBEDDED is not related to OLE

			if (!rCmdInfo.m_bRunEmbedded)
			{
				if (bUnregistered)
					AfxMessageBox(AFX_IDP_UNREG_DONE);
				else
					AfxMessageBox(AFX_IDP_UNREG_FAILURE);
			}
			bResult = FALSE;    // that's all we do

			// If nobody is using it already, we can use it.
			// We'll flag that we're unregistering and not save our state
			// on the way out. This new object gets deleted by the
			// app object destructor.

			if (m_pCmdInfo == NULL)
			{
				m_pCmdInfo = new CCommandLineInfo;
				m_pCmdInfo->m_nShellCommand = CCommandLineInfo::AppUnregister;
			}
		}
		break;
	}
	return bResult;
}
SDI好像是不可以屏蔽的,MDI可以

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧