CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

动态分割窗口,

楼主doghead(长青)2004-07-04 18:20:49 在 VC/MFC / 界面 提问

我做动态分割窗口的单文档程序,很不如意  
  能动态横向竖向分割,能删除任何一个窗格  
  能把布局保存到文件中  
   
  哪位高手做个示范。  
  删除活动窗口怎么做?  
   
  最好有个例子  
  谢了 问题点数:100、回复次数:6Top

1 楼whoo(谁)回复于 2004-07-04 23:51:26 得分 10

MFC   CSplitterWnd   本身   不能完成删除的功能,   不过可以从他继承下来,自己完成该功能,不过比较繁琐。  
   
  可以在网上找一些CSplitterWnd   的现成改进类,很多都新增了这个功能。Top

2 楼pomelowu(羽战士)回复于 2004-07-04 23:58:51 得分 10

删除比较复杂,但是隐藏还是比较容易的Top

3 楼yintongshun(左岸思雨)回复于 2004-07-05 00:01:46 得分 40

bool   CChildFrame::DeleteView()  
  {  
   
  CDocument   *   pDoc=   NULL;  
  CCreateContext   context;  
  pDoc=this->GetActiveDocument();  
  ASSERT(pDoc);  
   
  context.m_pNewViewClass=RUNTIME_CLASS(CNetObserverView);  
  context.m_pCurrentDoc=pDoc;  
  context.m_pNewDocTemplate=NULL;  
  context.m_pLastView=NULL;  
  context.m_pCurrentFrame=NULL;  
  if(m_pSplt==NULL)  
  {  
  TRACE("delete     View   is   error!\n");  
  return   false;  
   
  }  
   
  pDoc->m_bAutoDelete=FALSE;        
  if   (m_pSplt->m_hWnd)  
  {  
  m_pSplt->DestroyWindow();  
  }  
  delete   m_pSplt;  
  m_pSplt=NULL;  
          pDoc->m_bAutoDelete=TRUE;  
  //下面要创建父窗口的右侧视图  
  m_wndSplitter.CreateView(0,1,context.m_pNewViewClass,CSize(100,   100),   &context);  
  CView   *   pNewView=   (CView   *)m_wndSplitter.GetPane(0,1);  
  pNewView->OnInitialUpdate();  
  SetActiveView(pNewView);  
  m_wndSplitter.RecalcLayout();  
  TRACE("delete     View   is   good!\n");  
   
  return   true;  
  }  
   
  bool   CChildFrame::AddView(CRuntimeClass   *pNewViewClass)  
  {  
  //if(m_pSplt!=NULL)   return   ;  
  //添加View,用于服务列表视图  
  CDocument   *   pDoc=   NULL;  
  CCreateContext   context;  
  pDoc=this->GetActiveDocument();  
  ASSERT(pDoc);  
  ASSERT(m_pSplt==NULL);  
  //设备上下文  
  // if(m_pSplt!=NULL)   return   false;  
  context.m_pNewViewClass=pNewViewClass;  
  context.m_pCurrentDoc=pDoc;  
  context.m_pNewDocTemplate=NULL;  
  context.m_pLastView=NULL;  
  context.m_pCurrentFrame=NULL;  
   
  pDoc->m_bAutoDelete=FALSE;  
  CView*   pV   =   (CView   *)m_wndSplitter.GetPane(0,1);  
  ASSERT(pV);  
  pV->DestroyWindow();  
          pDoc->m_bAutoDelete=TRUE;  
   
   
  m_pSplt   =   new   CSplitterWnd;  
  if   (!m_pSplt->CreateStatic   (&m_wndSplitter,   2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0,1)))  
  {  
  TRACE("Add   View   is   error!\n");  
  return   false;  
  }  
  CView   *   pNewView;  
   
  context.m_pNewViewClass=RUNTIME_CLASS(CNetObserverView);  
   
   
  m_pSplt->CreateView(0,0,context.m_pNewViewClass,CSize(100,   100),   &context);  
  pNewView=   (CView   *)m_pSplt->GetPane(0,0);  
  pNewView->OnInitialUpdate();  
   
  context.m_pNewViewClass=pNewViewClass;  
   
  m_pSplt->CreateView(1,0,pNewViewClass,CSize(100,   100),   &context);  
  pNewView=   (CView   *)m_pSplt->GetPane(1,0);  
  pNewView->OnInitialUpdate();  
  SetActiveView(pNewView);  
  m_pSplt->RecalcLayout();  
  m_wndSplitter.RecalcLayout();  
  RecalcLayout();  
  TRACE("Add   View   is   good!\n");  
   
  return   true;  
   
   
  }  
   
  使用方法:  
  DeleteView();然后AddView(RUNTIME_CLASS(CYourView));Top

4 楼enoloo(在水一方)回复于 2004-07-05 00:50:28 得分 30

基本的撤消视图和分割条,可以到网上找资料。  
   
  在设计上,可以写一个结构来管理这些分割条对象。比如:  
  class   CSplitterInfo  
  {  
  public:  
      int   m_MaxRow,   m_MaxCol;  
      CSplitterWnd   m_wndSplitter;  
      CSplitterInfo::CSplitInfo();  
      CSplitterInfo   &operator=(const   CSplitInfo   &SplitInfo);  
  };  
  在主窗口可以通过编号维护一组splitter的映射表,  
  CMap   <int,   int,   CSplitterInfo,   CSplitterInfo&>   m_SplitterInfo;  
  对于不同的视图,可以指定依靠的splitter   id.移动视图或者显示视图的时候,可以根据这些信息定位和通信。Top

5 楼changlele(梦幻水晶)回复于 2004-07-05 15:41:43 得分 10

楼主,邮箱地址?  
  我发个例子给你看看。  
  Top

6 楼wang_bluebird(bluebird)回复于 2005-03-10 17:34:06 得分 0

能不能给各例子???Top

相关问题

  • 请问如何动态分割窗口
  • 如何动态分割窗口?
  • 在一个上下屏的分割窗口中,如何动态改变分割窗口大小,如何限制分割窗口最大和最小尺寸?
  • 分割窗口
  • 老问题,动态分割窗口的,我都不好意思问。
  • MDI工程如何分割主窗口,Treectrl如何动态创建并显现在主窗口区
  • 窗口分割CSplitterWnd?????
  • 如何动态分割NTFS分区
  • 关于分割窗口
  • 分割窗口问题?

关键词

  • 视图
  • view
  • null
  • psplt
  • pdoc
  • pnewviewclass
  • 分割
  • wndsplitter
  • csplitterinfo
  • pnewview

得分解答快速导航

  • 帖主:doghead
  • whoo
  • pomelowu
  • yintongshun
  • enoloo
  • changlele

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo