我创建了多文档之后,除了系统自带的一个类,我添加了两个对话框,dialog1,dialog2(都是CFromView类化的);框架初始化的时候跳出窗口,让我选择“新建”dialog1,dialog2,和系统提供的一个默认类。我的问题是,在有多个类的时候,这个窗口能不显示吗?如何将我的dialog1,dialog2,在框架初始化的时候全部显示,并且将这些dialog和我的主菜单关联,随时选择显示和关闭??在线等。
解决方案 »
- 求救,在MFC里找到一个外部IE的IWebBrowser2,如何得到该IE窗口的实际宽和高
- MFC 鼠标的形状
- 再次急求光栅图像矢量化的VC源代码,谢谢!(等了一下午,再等一晚上)
- 如何实现从弹出来的对话框按钮关闭整个程序???
- CPropertySheet中,切换Page时对CPropertySheet触发什么事件?
- (在线)MONTHCALENDAR获取选中时间的疑惑
- 用TextOut之类函数的时候怎样能把"&"显示为后一个字符的下划线?
- 怎样获取从当前时刻起到1900年1月1日0时0分0秒的所有秒数
- 请问,为什么我在"管理"项上给人加分时,弹出"The parameter is incorrect. "的错误!!
- 如何获得毫秒级的系统时间?
- 对话框中,资源加入listbox,想加入水平滚动条,编译后出现了但是不能拖动,为什么
- 客户区抓图
另一个关于dialog1,dialog2的显示问题,等同于问题1,你能控制了主窗体的显示,自然就能控制其他的,你先怎么显示都可以。
另外,关于何时显示主框架,可以再app类中控制,也可以在mainframe中create函数前(也就是主框架显示前)调用你自己的对话框。
我做的一个项目就是这种要求,一进来就显示所有CFormView的MDI子窗口,不用用户选择什么的。
项目不能给你,贴写代码给你参考吧,主要是在App的InitInstance中: // 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
//------------------------------ 上报信息 -----------------------------------
m_pUnitReceivedDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_UNIT_RECEIVED,
RUNTIME_CLASS(CUnitReceivedDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CUnitReceivedView));
if (!m_pUnitReceivedDocTemp)
{
::MessageBox(NULL,_T("创建查UnitReceived模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
return FALSE;
}
AddDocTemplate(m_pUnitReceivedDocTemp); //注册到框架,框架负责销毁
//------------------------------ 预编信息 -----------------------------------
if(m_strMDITabsType.find(_T("P"))!=LSN_TString::npos)
{
m_pPrevEditDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_PREVEDIT,
RUNTIME_CLASS(CPrevEditDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CPrevEditView));
if (!m_pPrevEditDocTemp)
{
::MessageBox(NULL,_T("创建查PrevEdit模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
return FALSE;
}
AddDocTemplate(m_pPrevEditDocTemp); //注册到框架,框架负责销毁
}//end if //------------------------------ 备选库 -----------------------------------
m_pEditSpareDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_EDITSPARE,
RUNTIME_CLASS(CEditSpareDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CEditSpareView));
if (!m_pEditSpareDocTemp)
{
::MessageBox(NULL,_T("创建查EditSpare模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
return FALSE;
}
AddDocTemplate(m_pEditSpareDocTemp); //注册到框架,框架负责销毁 //------------------------------ 全部 -----------------------------------
m_pAllInfoDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_ALLINFO,
RUNTIME_CLASS(CAllInfoDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CAllInfoView));
if (!m_pAllInfoDocTemp)
{
::MessageBox(NULL,_T("创建查AllInfo模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
return FALSE;
}
AddDocTemplate(m_pAllInfoDocTemp); //注册到框架,框架负责销毁
//------------------------------ 自己 -----------------------------------
m_pMyselfInfoDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_MYSELFINFO,
RUNTIME_CLASS(CMyselfInfoDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CMyselfInfoView));
if (!m_pMyselfInfoDocTemp)
{
::MessageBox(NULL,_T("创建查MyselfInfo模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
return FALSE;
}
AddDocTemplate(m_pMyselfInfoDocTemp); //注册到框架,框架负责销毁
//------------------------------ 汇总统计 -----------------------------------
m_pSumInfoDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_SUMINFO,
RUNTIME_CLASS(CSumInfoDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CSumInfoView));
if (!m_pSumInfoDocTemp)
{
::MessageBox(NULL,_T("创建查SumInfo模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
return FALSE;
}
AddDocTemplate(m_pSumInfoDocTemp); //注册到框架,框架负责销毁
技术上,建议你参考一下《MFC经典问答》,里面有几个问题谈到了如何使用CMultiDocTemplate进行多文档的控制和管理
可以参考的代码如下,也在App的InitInstance中:
里面有些授权控制的逻辑,接上面的代码段,我就懒得删除这些逻辑了,你将就着看看吧//打开功能页面,不能关闭,受权限控制
std::pair<LSN_TString,size_t> pair_mdi_tab_index;
size_t nCurShowTabCount=0,nMDI_TabCount=m_strMDITabsType.size();
if(m_strMDITabsType.find(_T("R"))!=LSN_TString::npos)
{
pair_mdi_tab_index.first=_T("R");
pair_mdi_tab_index.second=nCurShowTabCount;
m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
++nCurShowTabCount;
if(nCurShowTabCount>=nMDI_TabCount)
m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
m_pUnitReceivedDocTemp->OpenDocumentFile(NULL);
}//end if if(m_strMDITabsType.find(_T("P"))!=LSN_TString::npos)
{
pair_mdi_tab_index.first=_T("P");
pair_mdi_tab_index.second=nCurShowTabCount;
m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
++nCurShowTabCount;
if(nCurShowTabCount>=nMDI_TabCount)
m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
m_pPrevEditDocTemp->OpenDocumentFile(NULL);
}//end if if(m_strMDITabsType.find(_T("E"))!=LSN_TString::npos)
{
pair_mdi_tab_index.first=_T("E");
pair_mdi_tab_index.second=nCurShowTabCount;
m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
++nCurShowTabCount;
if(nCurShowTabCount>=nMDI_TabCount)
m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
m_pEditSpareDocTemp->OpenDocumentFile(NULL);
}//end if if(m_strMDITabsType.find(_T("A"))!=LSN_TString::npos)
{
pair_mdi_tab_index.first=_T("A");
pair_mdi_tab_index.second=nCurShowTabCount;
m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
++nCurShowTabCount;
if(nCurShowTabCount>=nMDI_TabCount)
m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
m_pAllInfoDocTemp->OpenDocumentFile(NULL);
}//end if if(m_strMDITabsType.find(_T("M"))!=LSN_TString::npos)
{
pair_mdi_tab_index.first=_T("M");
pair_mdi_tab_index.second=nCurShowTabCount;
m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
++nCurShowTabCount;
if(nCurShowTabCount>=nMDI_TabCount)
m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
m_pMyselfInfoDocTemp->OpenDocumentFile(NULL);
}//end if
if(m_strMDITabsType.find(_T("S"))!=LSN_TString::npos)
{
pair_mdi_tab_index.first=_T("S");
pair_mdi_tab_index.second=nCurShowTabCount;
m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
++nCurShowTabCount;
if(nCurShowTabCount>=nMDI_TabCount)
m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
m_pSumInfoDocTemp->OpenDocumentFile(NULL);
}//end if