作者:罗树鹏
时间:2010年1020日
博客:http:www.cnblogs.com/luoshupeng
问题提出的原因
我做一个MDI的工程,现在想让一些视图显示不同的风格,比如一些视图能够全屏,而另外一些视图就表现得像对话框一样。但是这些就样同一个东西的不同的两个样子。
我的做法
由于是同一个东西的不同的两个样子,于是我就采用了同一个文档类和同一个视图类,使用不同的CChildFrame,在子框架中改变视图的边框样式。下面是步骤:
1.先添加一个新的子框架类,我取名为CChildOtherFrame;
2.在APP类中添加两个文档模板类对象m_pDocTemplate1和m_pDocTemplate2,并在InitInstance()函数中实现化两个对象
m_pDocTemplate2 = new CMultiDocTemplate(
IDR_tmp1TYPE,
RUNTIME_CLASS(Ctmp1Doc),
RUNTIME_CLASS(CChildOtherFrame), // 自定义 MDI 子框架 RUNTIME_CLASS(Ctmp1View)
);
if (!m_pDocTemplate2)
return FALSE;
m_pDocTemplate2->SetContainerInfo(IDR_tmp1TYPE_CNTR_IP);
AddDocTemplate(m_pDocTemplate2);
m_pDocTemplate1 = new CMultiDocTemplate(
IDR_tmp1TYPE,
RUNTIME_CLASS(Ctmp1Doc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(Ctmp1View)
);
if (!m_pDocTemplate1)
return FALSE;
m_pDocTemplate1->SetContainerInfo(IDR_tmp1TYPE_CNTR_IP);
AddDocTemplate(m_pDocTemplate1);
3.响应两个菜单的消息:m_pDocTemplate1->OpenDocumentFile(NULL); 和 m_pDocTemplate2->OpenDocumentFile(NULL);
现在的问题是在响应m_pDocTemplate2->OpenDocumentFile(NULL);时会出现“创建空文档失败”的错误。
解决办法:
其实就是宏定义出了问题:
改DECLARE_DYNAMIC(CChildOtherFrame)为:DECLARE_DYNCREATE(CChildOtherFrame)
改IMPLEMENT_DYNAMIC(CChildOtherFrame, CMDIChildWndEx)为:IMPLEMENT_DYNCREATE(CChildOtherFrame, CMDIChildWndEx)