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

关于ctabctrl中显示tab的问题

楼主ag_66(阿Gu)2004-08-04 20:58:25 在 VC/MFC / 界面 提问

我在ctabctrl中加入了3个page(CTabOneDlg,CTabTwoDlg,CTabThreeDlg),当我的ctabctrl没有选者以bottom方式显示的时候,我的3个page可以正常显示,但是当我把ctabctrl设置成bottom方式显示的时候,我的3个page就不能够显示出来,请问这是怎么回事啊,望高手指点一下!我的部分代码如下:  
                    //获得显示区域大小  
                    CRect   tabRect,   itemRect;  
  int   nX,   nY,   nXc,   nYc;  
   
  GetClientRect(&tabRect);  
  GetItemRect(0,   &itemRect);  
   
  nX=itemRect.left;  
  nY=itemRect.bottom+1;  
  nXc=tabRect.right-itemRect.left-1;  
  nYc=tabRect.bottom-nY-1;  
                     
                    //设置3个page的显示区域  
                    //m_tabPages[3]的数据分别是{CTabOneDlg,CTabTwoDlg,CTabThreeDlg}  
  m_tabPages[0]->SetWindowPos(&wndTop,   nX,   nY,   nXc,   nYc,   SWP_SHOWWINDOW);  
  for(int   nCount=1;   nCount   <   m_nNumberOfPages;   nCount++)  
                  {  
          m_tabPages[nCount]->SetWindowPos(&wndTop,   nX,   nY,   nXc,   nYc,   SWP_HIDEWINDOW);  
  } 问题点数:30、回复次数:2Top

1 楼lixiaosan(小三)回复于 2004-08-04 21:57:42 得分 30

1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab   Control   控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl  
  2、创建两个新的对话框资源,其属性作如下修改:  
  Border:none   //边界为空,这样它就没了标题栏  
  Style   :Child   //   这样这个模板就可以当作另一个窗口的子窗口了。  
        其它如果没有必要,就不用改了。  
  在上面加一些控件什么的,具体操作跟普通对话框没有区别。  
  完成后从这两个对话框模板生成两个新的对话框类。  
  3、在主对话框中为新添加进来的两个类增加两个变量:  
  如:CDialog1   m_mm1;  
  CDialog2   m_mm2;  
  4、在主对话框的OnInitDialog()函数中添加如下类似的代码:  
          TCITEM   item;  
  item.mask   =   TCIF_TEXT;  
  item.pszText   =   "第一页";  
   
  m_tabctrl.InsertItem   (0,&item);  
  item.pszText   ="第二页";  
  m_tabctrl.InsertItem   (1,&item);  
   
  m_mm1.Create   (IDD_DIALOG1,&m_tabctrl);  
  m_mm2.Create   (IDD_DIALOG2,&m_tabctrl);  
   
  m_mm1.SetWindowPos   (NULL,10,30,400,100,SWP_SHOWWINDOW);  
  m_mm2.SetWindowPos   (NULL,10,30,400,100,SWP_HIDEWINDOW   );      
  解释如下:  
  两个InsertItem函数的调用是为了给标签控件增加两个标签页面,文本是标题。  
  SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。  
  5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。  
  在事件处理中添加如下代码,如下例:  
  void   CtabdialogDlg::OnTcnSelchangeTab1(NMHDR   *pNMHDR,   LRESULT   *pResult)  
  {  
  CRect   r;  
  m_tabctrl.GetClientRect   (&r);  
   
  switch(m_tabctrl.GetCurSel())  
  {  
  case   0:  
  m_mm1.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_SHOWWINDOW);  
  m_mm2.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_HIDEWINDOW   );      
  break;  
  case   1:  
  m_mm1.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_HIDEWINDOW);  
  m_mm2.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_SHOWWINDOW   );      
  break;  
  }  
  *pResult   =   0;  
  }  
  要想知道用户选择那个标签页,要通过m_tabctrl.GetCurSel()   函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。  
  Top

2 楼ag_66(阿Gu)回复于 2004-08-04 23:00:55 得分 0

非常感谢楼上的回答!我的做法其实和你一样,我想可能是我的控件放的位置有问题,才导致无法显示!Top

相关问题

  • 窗口切换时CTabCtrl中的CListCtrl不正常显示的问题
  • 怎样获取在CTabCtrl控件的tab页中绑定的值?
  • 请问和CTabCtrl控件差不多,但是每个Tab都可以放置控件,点不同的Tab,显示不同的内容,这样的控件是什么呀
  • CTabCtrl
  • CTabCtrl加位图,为什么不显示位图?
  • 请问如果不显示CTabCtrl的选项卡,
  • CDialogBar怎么显示不了CTabCtrl,份全部给了
  • 新手!如何在ctabctrl显示3个页面?
  • 中文显示
  • 怎样显示指定的tab页?

关键词

  • 控件
  • 函数
  • 代码
  • 选择
  • null
  • 对话框
  • ctabctrl
  • tabctrl
  • itemrect
  • setwindowpos

得分解答快速导航

  • 帖主:ag_66
  • lixiaosan

相关链接

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

广告也精彩

反馈

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