vc++ 怎么实现窗口的切换

我想通过点击按钮来切换不同的窗口,能不能用单文档来实现呢,还是说用多文档更方便,求教... 我想通过点击按钮来切换不同的窗口,能不能用单文档来实现呢,还是说用多文档更方便,求教 展开
 我来答
xz宏定义
2012-11-13 · TA获得超过1029个赞
知道小有建树答主
回答量:1621
采纳率:100%
帮助的人:228万
展开全部
用vc++编程时,利用csplitterwnd类实现拆分窗口比较简单,但是对于实现多个窗口的切换,例如应用程序拥有两个面板,一个是命令面板ccommandview,而另一个是显示面板。在显示面板中又可以根据命令面板的参数设置切换为不同的显示窗口(cdataview,cpictureview)。应该如何实现呢?

  一、建立窗口

   1、选择[insert]→[new form]菜单,弹出“new form”对话框。设置好你的窗口类名称(cdataview),基类选择cformview类。如果你的窗口所连接的文档为同一文档,就可以ok了;如果为不同文档,在document template infomation中设置你的文档类名,程序将自动在ctestapp::initinstance()中添加如下代码:

  csingledoctemplate* pnewdoctemplate = new csingledoctemplate(

  idr-dataview-tmpl,

  runtime-class(ctestdoc),

  //document class

  runtime-class(cmainframe),

  //frame class

  runtime-class(cdataview));

  //view class

  );

  adddoctemplate(pnewdoctemplate);

   2、同样建立另一个窗口cpictureview类。

  二、消除程序启动时出现的文档选择对话框

  程序启动时一般要新建一个文档开始工作,如果有多个视图/文档,就会弹出一个对话框来询问。修改的方法是不让vc选择新文档类型,即把ctestapp::ctestapp()中的语句

  if (!processshellcommand(cmdinfo)) return false;

   更改为m_pdoctemplate→opendocumentfile(null),即可。

  三、建立拆分窗口

   加载cmainframe类的oncreateclient虚函数,代码如下:

  bool cmainframe::oncreateclient(lpcreatestruct lpcs, ccreatecontext* pcontext)

  {

  // todo: add your specialized code here and/or call the base class

  if(!m_wndsplitter.createstatic(this,1,2))

  return false;

  if(!m_wndsplitter.createview(0,0,runtime-class(ccommandview),csize(300,300),pcontext))

  return false;

  if(!m_wndsplitter.createview(0,1,runtime-class(cdataview),csize(250,250),pcontext))

  return false;

  return true;

  有两种方法拆分窗口,分为静态(createstatic)和动态(create)。上面的即是静态方法。在动态拆分窗口中,视图通常为同样的类;在静态拆分窗口中通常为不同的类,因此作用更为广泛。

  四、进行窗口切换

  其实在某个面板中从窗口a切换到窗口b很简单,步骤如下:

  1、获得面板所在框架的句柄pmainframe;

  利用csplitterwnd类进行窗口切换必须在框架中进行。

  2、从面板中删除原窗口,使用deleteview()方法;

  3、从面板中创建目标窗口,使用createview()方法;

  4、重新布置刷新窗口。

  具体代码如下:

  ctestapp* myapp=(ctestapp*)afxgetapp();

  cmainframe* pmainframe=(cmainframe*)myapp→m_pmainwnd;

  pmainframe→m_wndsplitter.deleteview(0,1);

  pmainframe→m_wndsplitter.createview(0,1,runtime_class(cpictureview),

  csize(50,50),null);

  pmainframe→m_wndsplitter.recalc

  layout();

  根据以上做法,即可顺利完成多窗口的切换。
gecko3000
2012-11-14 · 超过10用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:27.6万
展开全部
用CSplitterWnd类实现,单文档可以实现的。参考二楼的代码,当然删除创建或者是用隐藏显示(设置分窗口大小)都能做到。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式