如何在SDI文档界面中实现像office新建窗口的对话框啊,分不够再给!!!!(MFC)

时间:2021-03-11 10:07:39
我在SDI文档界面中点击文件的菜单-》新建,就可以弹出像OFFICE新建中对话框,
上面有几项可以选择的,比如空白文档,WEB页,电子邮件,等等类似的样子,
请问这个该怎么实现啊

12 个解决方案

#1


加入新建菜单的事件响应函数,在其中弹出一个对话框,里面放了一个CListCtrl,选择图标方式就可以啊

#2


这个肯定要在CXXXApp::InitInstance()中加入多个文档模板(即支持多种文档类型),肯定是多文档,多视图了。
   作一个这样的界面是很简单的,新建中对话框中有几个选项,就代表共有几个类型的文档模板。
   用这种方法还可以把几个小程序合并为一个大程序。
   你可以把WEB页和电子邮件分别在2个程序中实现,完了之后,把他们合并即可。

#3


TO:DONGPY

可我是单文档行不行啊

#4


当然行,单文档和多文档的本质区别是:单文档,一个文档模板实例只能创建一个文档·框架和视图类的实例;多文档可以创建多个。但是,文档模板实例都可以有多个。
   建议你找本关于文档视图的书看一下,一般都会提到这个问题。
举个简单例子:
BOOL CXXXApp::InitInstance()
{  .......................................
  ...............................................
       CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CXXXDoc),
RUNTIME_CLASS(CMainFrame),      
RUNTIME_CLASS(CXXXView));
AddDocTemplate(pDocTemplate);
       CSingleDocTemplate* pDocTemplate2;
pDocTemplate2= new CSingleDocTemplate(
IDR_MAINFRAME2,
RUNTIME_CLASS(CXXX2Doc),
RUNTIME_CLASS(CMainFrame2),       
                  RUNTIME_CLASS(CXXX2View));
AddDocTemplate(pDocTemplate2);  
 ........................................
.......................................
}
这样,在新建时就会弹出选择对话框。

#5


to: dongpy(图象新手) 

你这样的情况我试过了,出来的新建对话框只能是一个模式的,

比如我想点击-》文件—》新建,弹出来的对话框我可以自定义,比如我还想弹出的对话框上添加CListCtrl,像OFFICE新建文档时弹出的对话框一样,

我可不可以在CMainFrm中派生一个OnFileNew啊,来自定义新建对话框

#6


http://www.eaoo.com/design/list.asp?classid=2&Nclassid=13

#7


没用啊

#8


to:  msadmin(狐狸糊涂)  
   新建对话框可以自定义(也可以用非模态的),它的用途只是传递一个整型变量,Radio Button和List Control没有本质区别。这样就要重载OnFileNew,你的思路是对的。

#9


to: msadmin(狐狸糊涂)
    重载OnFileNew应该在CXXXApp类中,而不是CMainFrame类。
你是准备用多个文档模板实例吧?

#10


to :dongpy(图象新手) 

我不准备用多个文档模板,我只想用一个单文档模板行不行啊;

CSingleDocTemplate* pDocTemplate;

我想在CMainFrame中重载OnFileNew.
BOOL CMainFrame::OnFileNew()
{
CNewDlg::OnInitDialog();
}

在CXXXApp中声名
BOOL CNewDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_sheet.AddPage("tab1", &m_page1, IDD_DIALOG1);
m_sheet.AddPage("tab2", &m_page2, IDD_DIALOG2);
m_sheet.Show();

return TRUE;  // return TRUE  unless you set the focus to a control
}

就是像我上面说的那样形式,不知道老兄理解我的话没有
我的目的就是想点击File->新建,弹出像OFFICE新建文档一样形式的对话框

#11


第一个回答不就是吗,
BOOL CMainFrame::OnFileNew()
{
CNewDlg dlg;
dlg.DoModal();
}

还是慢慢来吧,先学习使用对话框吧

#12


找不到DoModal()

#1


加入新建菜单的事件响应函数,在其中弹出一个对话框,里面放了一个CListCtrl,选择图标方式就可以啊

#2


这个肯定要在CXXXApp::InitInstance()中加入多个文档模板(即支持多种文档类型),肯定是多文档,多视图了。
   作一个这样的界面是很简单的,新建中对话框中有几个选项,就代表共有几个类型的文档模板。
   用这种方法还可以把几个小程序合并为一个大程序。
   你可以把WEB页和电子邮件分别在2个程序中实现,完了之后,把他们合并即可。

#3


TO:DONGPY

可我是单文档行不行啊

#4


当然行,单文档和多文档的本质区别是:单文档,一个文档模板实例只能创建一个文档·框架和视图类的实例;多文档可以创建多个。但是,文档模板实例都可以有多个。
   建议你找本关于文档视图的书看一下,一般都会提到这个问题。
举个简单例子:
BOOL CXXXApp::InitInstance()
{  .......................................
  ...............................................
       CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CXXXDoc),
RUNTIME_CLASS(CMainFrame),      
RUNTIME_CLASS(CXXXView));
AddDocTemplate(pDocTemplate);
       CSingleDocTemplate* pDocTemplate2;
pDocTemplate2= new CSingleDocTemplate(
IDR_MAINFRAME2,
RUNTIME_CLASS(CXXX2Doc),
RUNTIME_CLASS(CMainFrame2),       
                  RUNTIME_CLASS(CXXX2View));
AddDocTemplate(pDocTemplate2);  
 ........................................
.......................................
}
这样,在新建时就会弹出选择对话框。

#5


to: dongpy(图象新手) 

你这样的情况我试过了,出来的新建对话框只能是一个模式的,

比如我想点击-》文件—》新建,弹出来的对话框我可以自定义,比如我还想弹出的对话框上添加CListCtrl,像OFFICE新建文档时弹出的对话框一样,

我可不可以在CMainFrm中派生一个OnFileNew啊,来自定义新建对话框

#6


http://www.eaoo.com/design/list.asp?classid=2&Nclassid=13

#7


没用啊

#8


to:  msadmin(狐狸糊涂)  
   新建对话框可以自定义(也可以用非模态的),它的用途只是传递一个整型变量,Radio Button和List Control没有本质区别。这样就要重载OnFileNew,你的思路是对的。

#9


to: msadmin(狐狸糊涂)
    重载OnFileNew应该在CXXXApp类中,而不是CMainFrame类。
你是准备用多个文档模板实例吧?

#10


to :dongpy(图象新手) 

我不准备用多个文档模板,我只想用一个单文档模板行不行啊;

CSingleDocTemplate* pDocTemplate;

我想在CMainFrame中重载OnFileNew.
BOOL CMainFrame::OnFileNew()
{
CNewDlg::OnInitDialog();
}

在CXXXApp中声名
BOOL CNewDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_sheet.AddPage("tab1", &m_page1, IDD_DIALOG1);
m_sheet.AddPage("tab2", &m_page2, IDD_DIALOG2);
m_sheet.Show();

return TRUE;  // return TRUE  unless you set the focus to a control
}

就是像我上面说的那样形式,不知道老兄理解我的话没有
我的目的就是想点击File->新建,弹出像OFFICE新建文档一样形式的对话框

#11


第一个回答不就是吗,
BOOL CMainFrame::OnFileNew()
{
CNewDlg dlg;
dlg.DoModal();
}

还是慢慢来吧,先学习使用对话框吧

#12


找不到DoModal()