我在做实验是要用到在一个单文档应用程序中,点击菜单,切换不同的视图,视图不需要进行分割。已经在网上查看过一些资料,但还是不太明白,希望高手不吝赐教。能够具体讲一讲思路和需要用到什么类,如果有资料希望可以和我分享一下,不胜感激。
解决方案 »
- 类里有个static int 值 只要删除这个类就出错 为啥
- 请达人讲解下VS2005添加右键菜单的详细流程
- 用CryptoAPI进行RSA非对称加密解密
- 我的VC中Activex control列表中为什么没有web browser控件,如何加载呢
- VC制作的activeX控件至少有两层吗?怎么才能作出已有一层的ACTIVEX控件?怎么设定控件的Style 和extended style
- jpg文件一般如何进行处理(比如平滑、边缘提取等),是不是先得转化为bmp再处理?
- 请问COM/ActiveX如何捕获IE中的Web事件,onClick=''/href=''
- 如何改变框架边缘样式呢?贴图或是换颜色?如何获取其区域?
- 一个问题,请大家帮忙翻译一下!
- 关于MFC程序移植到Linux的问题
- vc如何获取tab页窗口实例
- MFC中edit控件的焦点问题
{
CFrameWnd* pFrame=(CFrameWnd*)m_pMainWnd;
CRuntimeClass* pNewView;
switch(vid)
{
default:
case 1:
pNewView=RUNTIME_CLASS(CxxxListView);
break;
case 2:
pNewView=RUNTIME_CLASS(CxxxKLineView);
break;
case 3:
pNewView=RUNTIME_CLASS(CxxxRealView);
break;
case 4:
pNewView=RUNTIME_CLASS(CxxxTradListView);
break;
case 5:
pNewView=RUNTIME_CLASS(CxxxHtml);
break;
}
ASSERT(pFrame);
ASSERT(pNewView);
// 获取当前的视图。
CView* pCurrentView = pFrame->GetActiveView();
CRect rcView;
if(pCurrentView!=NULL)
{ //嵌套了VIEW CWnd *p=pCurrentView->GetParent();
if(p->IsKindOf(RUNTIME_CLASS(CxxxMutiView)))
pCurrentView=(CView*)p;
//如果要转化的视图和当前视图为同一类型,就直接退出。
if (pCurrentView->IsKindOf(pNewView))
{
pCurrentView->OnInitialUpdate();
return;
}
// 保存当前视图的位置。
pCurrentView->GetWindowRect(&rcView);
pCurrentView->DestroyWindow();
}
// 创建新的上下文。
CCreateContext context;
context.m_pCurrentFrame = NULL;
context.m_pLastView = NULL;
context.m_pNewDocTemplate = NULL;
// context.m_pCurrentDoc = pDoc;
context.m_pNewViewClass = pNewView;
// 创建视图。
CView* pNewCreateView = static_cast<CView*>(pFrame->CreateView(&context));
CurHWnd=pNewCreateView->m_hWnd;
// 移动新视图到原来视图的位置。
pFrame->ScreenToClient(&rcView);
pNewCreateView->OnInitialUpdate();
pNewCreateView->MoveWindow(&rcView);
pFrame->SetActiveView(pNewCreateView);
// 更新。
SetSocketCmd(vid);
// pFrame->InitialUpdateFrame(pDoc, TRUE);
// pFrame->MoveWindow(0,0,1024,768);//最大化}
可以一个Doc类添加多个View类,使用共同的一个客户窗口(楼主大概是这个意思)。通过菜单选项等方式切换不同的活跃的View,每个View又都有自己的OnDraw(),这样不同的View就会在窗口绘出不同的内容。