鱼C论坛

 找回密码
 立即注册
查看: 4811|回复: 2

[技术交流] 【MFC入门文字教程】22-标签页控件(CTabCtrl)

[复制链接]
发表于 2016-11-27 17:52:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
标签页控件是什么呢?
92.JPG
懂了吧!如果对一个标签页控件添加变量的话,变量类型就是CTabCtrl的。

CTabCtrl有什么成员函数呢?https://msdn.microsoft.com/zh-cn/library/essk9hbw(v=vs.120).aspx
(重要提示:请大家认真看msdn文档,否则你可能会看不懂下面的例子)
另外至于可以添加什么事件处理程序,请大家试试。

实践时间!
Test.gif
本次例子比较复杂,UINT担心大家看不懂,就破例给大家讲解下。
1.在资源文件上选择添加->资源
resource.gif
2.选择Dialog,然后点击“新建(N)”
93.JPG
3.重复第二步,即创建2个对话框(因为一会儿有2个标签)
4.(关键一步)把2个对话框的Style属性都设置为Child,把Border设置为None。
5.给第一个对话框拖一个Static Text,把Caption属性设置为“我是标签页1”,给第二个对话框拖一个Static Text,把Caption属性设置为“我是标签页2”
6.给第一个对话框添加类,类名就是CDlg1,给第二个对话框添加类,类名就是CDlg2
94.JPG
7.在[你的工程名]Dlg.h里面包含Dlg1.h和Dlg2.h
8.在[你的工程名]Dlg.h里面的C[你的工程名]Dlg类添加如下内容(你可能会问要什么访问属性,随你,public 即可)
  1. CDlg1 m_Dlg1;
  2. CDlg2 m_Dlg2;
复制代码

9.在OnInitDialog中添加如下代码
  1.         CRect tabRect;   // 标签控件客户区的位置和大小   

  2.         m_tab.InsertItem(0, _T("标签页1"));         // 插入第一个标签“标签页1”   
  3.         m_tab.InsertItem(1, _T("标签页2"));  // 插入第二个标签“标签页2”   
  4.         m_Dlg1.Create(IDD_DIALOG1, &m_tab);    // 创建第一个标签页   
  5.         m_Dlg2.Create(IDD_DIALOG2, &m_tab); // 创建第二个标签页   

  6.         m_tab.GetClientRect(&tabRect);    // 获取标签控件客户区Rect   
  7.         // 调整tabRect,使其覆盖范围适合放置标签页   
  8.         tabRect.left += 1;
  9.         tabRect.right -= 1;
  10.         tabRect.top += 25;
  11.         tabRect.bottom -= 1;

  12.         // 根据调整好的tabRect放置m_jzmDlg子对话框,并设置为显示   
  13.         m_Dlg1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);//注意!这里不能用ShowWindow!!
  14.         // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏   
  15.         m_Dlg2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);//注意!这里不能用ShowWindow!!
复制代码

如果现在就运行,你会看到无法切换标签页。
所以我们要添加TCN_SELCHANGE(选择切换)的事件处理程序。
10.添加TCN_SELCHANGE(选择切换)的事件处理程序。
11.在TCN_SELCHANGE的事件处理程序中添加以下代码。
  1.         CRect tabRect;
  2.         m_tab.GetClientRect(&tabRect);
  3.         tabRect.left += 1;
  4.         tabRect.right -= 1;
  5.         tabRect.top += 25;
  6.         tabRect.bottom -= 1;

  7.         switch (m_tab.GetCurSel())
  8.         {
  9.         case 0:// 如果标签控件当前选择标签为“标签页1”,则显示m_Dlg1对话框,隐藏m_Dlg2对话框   
  10.                 m_Dlg1.ShowWindow(SW_SHOW);
  11.                 m_Dlg2.ShowWindow(SW_HIDE);
  12.                 break;
  13.         case 1:// 如果标签控件当前选择标签为“标签页2”,则隐藏m_Dlg1对话框,显示m_Dlg2对话框   
  14.                 m_Dlg1.ShowWindow(SW_HIDE);
  15.                 m_Dlg2.ShowWindow(SW_SHOW);
  16.                 break;
  17.         }
复制代码

现在运行,就好了~

下期预告
动画控件!动画控件!动画控件!
重要的事情说三遍!!!

评分

参与人数 1荣誉 +8 鱼币 +8 贡献 +5 收起 理由
拈花小仙 + 8 + 8 + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-6 15:18:05 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-25 18:29:10 | 显示全部楼层
m_tab是什么呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 06:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表