多文档/视图中激活不同视图的问题
请问:在MFC的多文档/视图结构中,新增加了一个或几个同文档的视,在程序运行时,通过执行菜单命令调用不同的视。现在问题是:当用户执行某菜单命令,需要某一特定的视时,程序如何判断该视已经被打开了一份,从而直接将该视直接激活而不重新打开一个新的视图?注:现有我已经编写的菜单命令中程序代码均仿照File/New程序代码,故只能新开视窗口而无法激活已有的视。谢谢各位了!我将提供我所能提供的最大分值做为报酬。 问题点数:100、回复次数:9Top
1 楼sietlkj(我心已死)回复于 2002-03-06 09:16:56 得分 0
各位帮帮忙啊!给各位作揖了.Top
2 楼sietlkj(我心已死)回复于 2002-03-06 09:16:56 得分 0
各位帮帮忙啊!给各位作揖了.Top
3 楼sietlkj(我心已死)回复于 2002-03-06 09:17:55 得分 0
各位帮帮忙啊!给各位作揖了.Top
4 楼howard(舍.得.)回复于 2002-03-06 09:20:04 得分 10
CDocument *pDoc=GetActiveDocument();
CView *pOldView=GetActiveView();
CView *pNewView=(CView*)new CFormSupplyView;
pNewView->Create(NULL,"Fac",AFX_WS_DEFAULT_VIEW,
rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
pNewView->OnInitialUpdate();
pNewView->ShowWindow(SW_SHOW);
pOldView->ShowWindow(SW_HIDE);
pDoc->AddView(pNewView);
pDoc->RemoveView(pOldView);
SetActiveView(pNewView);
RecalcLayout();
Top
5 楼sietlkj(我心已死)回复于 2002-03-06 09:31:51 得分 0
对不起,如果已经启动了该视,上面那一句是判断其是否存在,并将其激活的?能否详细说明,谢了!
pNewView-> Create(NULL,"Fac",AFX_WS_DEFAULT_VIEW,
rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
pNewView-> OnInitialUpdate();
这两句是重新声称新的视图吗?
Top
6 楼howard(舍.得.)回复于 2002-03-06 09:37:04 得分 0
这样, if(pNewView->GetSafeHand()==NULL)
Create(...);
pNewView->OninitalUpdateTop
7 楼howard(舍.得.)回复于 2002-03-06 09:38:43 得分 0
判断if(pNewView->GetSafeHand()==NULL)我是猜测的,没有测试Top
8 楼cajon(峡谷泥)回复于 2002-03-06 09:49:42 得分 90
建议你每次打开一个新的视图的时候,将他的指针保存起来,然后每次只需要判断相应的指针是否为空,附带判断GetSafeHwnd()是否为NULL,不就行了!
例如:
pView1, pView2, pView3等等
记住要在构造函数里将他们头赋值为NULL;
建立第一个视图时,pView1 = 新建的视图,
if (pView1 == NULL || pView1->GetSafeHwnd() == NULL)
create(...);
else
激活pView1;
在有!视图关闭时,需要将相应的指针赋为空!否则会报错!Top
9 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-03-06 10:11:39 得分 0
VWRPLC32 Replacing a View in a CMDIChildWnd Window
Q141499
--------------------------------------------------------------------------------
The information in this article applies to:
The Microsoft Foundation Classes (MFC), used with:
Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1, 4.2, 5.0, 6.0
--------------------------------------------------------------------------------
This is the 32-bit version of this sample.
How to Replace a View in a Splitter Window
Q149257
--------------------------------------------------------------------------------
The information in this article applies to:
The Microsoft Foundation Classes (MFC), used with:
Microsoft Visual C++, 32-bit Editions, version 4.0
VSWAP32 Demos Multiple-View Switching in SDI
Q141334
--------------------------------------------------------------------------------
The information in this article applies to:
The Microsoft Foundation Classes (MFC), used with:
Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1
Microsoft Visual C++, 32-bit Enterprise Edition, version 4.2
Microsoft Visual C++, 32-bit Professional Edition, version 4.2
Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0
Microsoft Visual C++, 32-bit Professional Edition, version 5.0
Microsoft Visual C++, 32-bit Enterprise Edition, version 6.0
Microsoft Visual C++, 32-bit Professional Edition, version 6.0
Microsoft Visual C++, 32-bit Learning Edition, version 6.0Top
10 楼sietlkj(我心已死)回复于 2002-03-06 10:47:12 得分 0
Thanks! If pass, I will give you the fens at once.Top




