MFC中CTabSheet继承CTabCtrl的方法

本文介绍了如何在MFC中通过CTabSheet类继承CTabCtrl,实现对话框与选项卡控件的关联。通过创建对话框,插入标签页,并添加点击事件处理,使得在标签页切换时能动态显示和隐藏对应对话框。
摘要由CSDN通过智能技术生成

思路:当我们调用InsertItem()这个函数的时候,选项卡控件将会添加一个标签页,这个时候,我们将自己的对话框的窗体的指针与此标签页关联起来,当用户进行标签页的切换的时候,我们根据当前是哪个标签页,显示哪个对话框,不是与当前标签页关联的对话框,我们将其隐藏即可.这样我们便可以实现选项卡控件.

 

 

 

 第一步:新建一个自己的类CTabSheet继承CTabCtrl.
  第二步:定义有用的成员变量
  CDialog* m_dlgWnd[MAXTABPAGE]; //这个是存放对话框指针的指针数组
  int m_curTabNumber; //记录当前用户添加了几个标签页
  int m_selTabID; //当前用户点击的标签页的ID
  第三步:添加成员函数
  //通过这个函数,可以将一个对话框指针与添加的标签页关联起来,insWnd是创建的非模式对话框的指针,wndID是对话框的ID,pageText是标签页的标题
  void CreateTabPage(CWnd *insWnd, int wndID,CString pageText)
  //添加控件的点击事件的处理,当点击后得到当前点击的标签页的ID,然后将与此标签页相关的对话框显示,其它的隐藏即可
  void OnLButtonDown(UINT nFlags, CPoint point)
  通过添加以上的成员变量及成员函数即可实现一个简单的选项卡控件的用法
  下面我将这两个成员函数的代码贴出来,并详细讲解
//创建并且增加一个标签页
  //创建并且增加一个标签页
  void CTabSheet::CreateTabPage(CWnd *insWnd, int wndID,CString pageText)
  {
  if (m_curTabNumber >= MAXTABPAGE)
  {
  MessageBox("标签页己经达到最大!","创建出错!

/* 使用方法: 添加对话框资源,并且各个子对话框资源的属性应设置为:Style为Child,Border为None。 为这些对话框建立类(直接从CDialog继承)如CPage1、CPage2…… 在主对话框的类添加成员变量:CPage1 m_Page1;、CPage2 m_Page2;…… 在主对话框资源,加入一个Tab Control,并且适当调整位置和大小。利用ClassWizard来为这个Tab Control创建 一个CTabSheet的控件变量m_TabSheet。 在主对话框的OnInitDialog()加入: m_TabSheet.AddPage("tab1", &m_page1, IDD_DIALOG1); m_TabSheet.AddPage("tab2", &m_page2, IDD_DIALOG2); …… 如果要给标签加上图标,在AddPage之前设置好ImageList: //为TabCtrl控件添加图标 m_imageList.Create(16, 16, ILC_COLOR32, 1, 1); CBitmap bitmap1,bitmap2; bitmap1.LoadBitmap(IDB_BITMAP1); bitmap2.LoadBitmap(IDB_BITMAP2); m_imageList.Add(&bitmap1, RGB(0,0,0)); m_imageList.Add(&bitmap2, RGB(0,0,0)); m_TabSheet.SetImageList(&m_imageList); //给TabCtrl添加页 m_TabSheet.AddPage(_T("Page1"), &m_Page1, m_Page1.IDD, 0); m_TabSheet.AddPage(_T("第二页"), &m_Page2, m_Page2.IDD, 1); 很不可思议的是,我在测试,如果在工程没有把TabCtrl的标签设置成左边或右边的话, 那么在运行时修改标签的位置为左边或右边时会出现问题,但是只要曾经设置过TabCtrl的标签为左边或右边后, 以后运行不管工程的TabCtrl的标签是怎样设置的,在运行时都可以正确的修改其标签的位置。 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值