高分求救!!怎样在MDI中,实现点击menubutton后弹出不同的FormView?

dd777 2003-04-16 11:51:32
new了一个FormView,但运行时,提示'选择哪个Form来运行',

我用vc时间不长,最好详细点,有代码更好!

谢谢了!
...全文
70 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxjlw 2003-04-25
  • 打赏
  • 举报
回复
http://www.codeguru.com/doc_view/TabbedViews.shtml
这是一个mdi application,
你可将每个Tab视图类的基类换成CFormView即可达到你的目的。
dd777 2003-04-25
  • 打赏
  • 举报
回复
dd777 2003-04-21
  • 打赏
  • 举报
回复
up
dd777 2003-04-20
  • 打赏
  • 举报
回复
up
dd777 2003-04-20
  • 打赏
  • 举报
回复
没人吗?
dd777 2003-04-19
  • 打赏
  • 举报
回复
up
gavinyu 2003-04-17
  • 打赏
  • 举报
回复
用不同的文档模板:
BOOL CTestApp::InitInstance()
{
...
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // main MDI frame window
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);

m_pTemplate1 = new CMultiDocTemplate(
IDR_VIEW1,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTxtView));
m_pTemplate2 = new CMultiDocTemplate(
IDR_VIEW2,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTestView));
...
}
//例如要显示FormView1
void CMainFrame::OnShowView1()
{
...
ShowView1();
...
}
void CMainFrame::ShowView1()
{
/////////////////////////////////////////////
CMDIFrameWnd *pMFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
//Get the active MDI child window.
CMDIChildWnd* pActiveChild = (CMDIChildWnd *) pMFrame->GetActiveFrame();
//or CMDIChildWnd *pActiveChild = pFrame->MDIGetActive();
CDocument* pDocument;
if (pActiveChild == NULL ||
(pDocument = pActiveChild->GetActiveDocument()) == NULL)
{
TRACE0("Warning: No active document for WindowNew command\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
return; // command failed
}

// otherwise we have a new frame!
CDocTemplate* pTemplate = ((CTestApp*) AfxGetApp())->m_pTemplate1;
ASSERT_VALID(pTemplate);
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
if (pFrame == NULL)
{
TRACE0("Warning: failed to create new frame\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
return; // command failed
}

pTemplate->InitialUpdateFrame(pFrame, pDocument);
//////////////////////////////////////////////////
}
dd777 2003-04-17
  • 打赏
  • 举报
回复
我想这样:

比如MainFrm.h 里定义一个bool opened; MainFrm.cpp初始化为false

点击菜单按钮事件OnMenuItem1判断
if(opened == false){
CMultiDocTemplate* pNewDocTemplate = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CPhoneToneCardDoc), // document class
RUNTIME_CLASS(CChildFrame), // frame class
RUNTIME_CLASS(CView1)); //CFORMVIEW

CDocument *pTempDoc=pNewDocTemplate->CreateNewDocument();
CFrameWnd *pTempFrame=pNewDocTemplate->CreateNewFrame(pTempDoc,this);
pNewDocTemplate->InitialUpdateFrame(pTempFrame,pTempDoc,true);

opened = true;
}

这样可以实现只打开一次,但怎么在CView1关闭时将opened再恢复为false?

先谢谢了
gavinyu 2003-04-17
  • 打赏
  • 举报
回复
使用不同的模板可以加不同的Doc,ChildFrame,View,有更自由的选择,当然需不需要就
随你了,没有什么非要用的。
控制每种view的数量,各加一个都可以访问到的变量就行了阿。
dd777 2003-04-17
  • 打赏
  • 举报
回复
为什么要使用不同的摸版?我这里好象把要显示的 view类名换了就可以了。

另外,如何控制一种view只弹出一个?最好能按不同的按钮,使相应的view来到前台。

谢谢了!
zhdleo 2003-04-16
  • 打赏
  • 举报
回复
MDI.

在App中读入一个新的,设计有选择切换FormView选项的菜单,

然后再CChildFrame响应菜单来变换Form

dd777 2003-04-16
  • 打赏
  • 举报
回复
没人吗?

15,979

社区成员

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

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