看《深入浅出MFC》的又一个疑惑

ynnej_ivy 2011-12-20 08:51:23
树上p347说,CDocManger拥有一个指针列表,用来维护一系列的Document Template,
Question:既然有多份文档模板的存在,如何确定是选择哪个文档模板类来动态创建Document/View/Frame对象?
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2012-01-17
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
康斯坦汀 2011-12-20
  • 打赏
  • 举报
回复
不熟悉MFC,试解释如下:
这里的文档模板,我理解应该是类似工厂类的东东,或者说是管理类,也就是一个
文档模板对应一个Document、多个View.文档模板仅负责创建和管理,由于文档是多份,
所以需要有选择,如1楼,2楼所说,当文档是多份时,新建会弹出一个选择框,这个功能
MFC已经实现了。
iamshuke 2011-12-20
  • 打赏
  • 举报
回复
你可以自己调用指定模板的OpenDocumentFile方法。OnFileNew中也会处理,如果发现有多个模板,会让用户选择,MFC中代码如下:

void CDocManager::OnFileNew()
{
if (m_templateList.IsEmpty())
{
TRACE(traceAppMsg, 0, "Error: no document templates registered with CWinApp.\n");
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
return;
}

CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead();
if (m_templateList.GetCount() > 1)
{
// more than one document template to choose from
// bring up dialog prompting user
CNewTypeDlg dlg(&m_templateList);
INT_PTR nID = dlg.DoModal();
if (nID == IDOK)
pTemplate = dlg.m_pSelectedTemplate;
else
return; // none - cancel operation
}

ASSERT(pTemplate != NULL);
ASSERT_KINDOF(CDocTemplate, pTemplate);

pTemplate->OpenDocumentFile(NULL);
// if returns NULL, the user has already been alerted
}


15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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