VS2010-MFC(常用控件:标签控件Tab Control 下)
转自:http://www.jizhuomi.com/software/207.html
上一节讲了标签控件知识的上半部分,本节继续讲下半部分。
标签控件的创建
MFC为标签控件的操作提供了CTabCtrl类。
与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Control,也可以使用CTabCtrl类的Create成员函数创建。Create函数的原型如下:
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
参数dwStyle为标签控件的风格,rect为标签控件的位置和大小,pParentWnd为指向标签控件父窗口的指针,nID指定标签控件的ID。这里还是要具体说下dwStyle,下面列出了几种主要的控件风格:
TCS_BUTTONS:标签(控件上部用来选择标签页的位置)外观为按钮风格,且整个控件周围没有边框。
TCS_FIXEDWIDTH :所有标签具有相同的宽度。
TCS_MULTILINE:标签以多行显示,如果需要,可以显示所有标签。
TCS_SINGLELINE:只显示一行标签,用户可以滚动着看其他标签。
TCS_TABS:标签以普通标签样式显示,且整个控件周围有边框。
如果想了解标签控件的所有风格,可以查阅MSDN。
CTabCtrl类的主要成员函数
int GetCurSel( ) const;
获取标签控件中当前选择标签的索引。如果成功则返回选择标签的索引,否则返回-1。
BOOL GetItem(int nItem,TCITEM* pTabCtrlItem) const;
获取标签控件中某个标签的信息。参数nItem为标签索引,pTabCtrlItem为指向TCITEM结构体的指针,用来接收标签信息。若获取成功返回TRUE,否则返回FALSE。
int GetItemCount( ) const;
获取标签控件中标签的数量。
int SetCurSel(int nItem);
在标签控件中选择某标签。参数nItem为要选择的标签的索引。如果成功则返回之前选择标签的索引,否则返回-1。
BOOL SetItem(int nItem,TCITEM* pTabCtrlItem);
设置某标签的所有或部分属性。参数nItem为标签的索引,pTabCtrlItem为指向TCITEM结构体的指针,包含了新的标签属性。成功则返回TRUE,否则返回FALSE。
BOOL DeleteAllItems( );
删除标签控件中所有标签。
BOOL DeleteItem(int nItem);
删除标签控件中的某个标签。参数nItem为要删除标签的索引。
LONG InsertItem(int nItem,LPCTSTR lpszItem);
在标签控件中插入新的标签。参数nItem为新标签的索引,lpszItem为标签文本字符串。如果插入成功则返回新标签的索引,否则返回-1。
标签控件的应用实例
最后依然是给大家写一个简单的实例,说明CTabCtrl类的几个成员函数及标签控件通知消息等的使用方法。
此实例实现的功能:在一个标签控件中加入两个标签页,标签文本分别为“鸡啄米”和“Android开发网”,点击不同的标签显示不同的标签页。下面是具体实现步骤:
1. 创建一个基于对话框的MFC工程,名称设置为“Example33”。
2. 在自动生成的对话框模板IDD_EXAMPLE33_DIALOG中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tab。
3. 创建两个新的对话框,ID分别设为IDD_JIZHUOMI_DIALOG、IDD_ANDROID_DIALOG,两者都将Border属性设为None,Style属性设为Child。在对话框模板IDD_JIZHUOMI_DIALOG中加入一个静态文本框,Caption属性设为“鸡啄米 www.jizhuomi.com”,并为其生成对话框类CJzmDlg;在对话框模板IDD_ANDROID_DIALOG中也加入一个静态文本框,Caption属性设为“Android开发网 www.jizhuomi.com/android”,并为其生成对话框类CAndroidDlg。
4. 在“Example33Dlg.h”文件中包含“JzmDlg.h”和“AndroidDlg.h”两个头文件,然后继续在“Example33Dlg.h”文件中为CExample33Dlg类添加两个成员变量:
CJzmDlg m_jzmDlg;
CAndroidDlg m_androidDlg;
5. 在CExample33Dlg对话框初始化时,我们也初始化标签控件。修改CExample33Dlg::OnInitDialog()函数如下:
BOOL CExample33Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here CRect tabRect; // 标签控件客户区的位置和大小 m_tab.InsertItem(0, _T("鸡啄米")); // 插入第一个标签“鸡啄米” m_tab.InsertItem(1, _T("Android开发网")); // 插入第二个标签“Android开发网” m_jzmDlg.Create(IDD_JIZHUOMI_DIALOG, &m_tab); // 创建第一个标签页 m_androidDlg.Create(IDD_ANDROID_DIALOG, &m_tab); // 创建第二个标签页 m_tab.GetClientRect(&tabRect); // 获取标签控件客户区Rect // 调整tabRect,使其覆盖范围适合放置标签页 tabRect.left += 1; tabRect.right -= 1; tabRect.top += 25; tabRect.bottom -= 1; // 根据调整好的tabRect放置m_jzmDlg子对话框,并设置为显示 m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏 m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); return TRUE; // return TRUE unless you set the focus to a control }
6. 运行程序,查看结果,这时我们发现切换标签时,标签页并不跟着切换,而总是显示CJzmDlg对话框。
7. 我们要实现的是标签页的切换效果,所以还要为m_tab标签控件的通知消息TCN_SELCHANGE添加处理函数,并修改如下:
void CExample33Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: Add your control notification handler code here *pResult = 0; CRect tabRect; // 标签控件客户区的Rect // 获取标签控件客户区Rect,并对其调整,以适合放置标签页 m_tab.GetClientRect(&tabRect); tabRect.left += 1; tabRect.right -= 1; tabRect.top += 25; tabRect.bottom -= 1; switch (m_tab.GetCurSel()) { // 如果标签控件当前选择标签为“鸡啄米”,则显示m_jzmDlg对话框,隐藏m_androidDlg对话框 case 0: m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); break; // 如果标签控件当前选择标签为“Android开发网”,则隐藏m_jzmDlg对话框,显示m_androidDlg对话框 case 1: m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); break; default: break; } }
8. 再运行程序,最终的标签页切换效果如下面两图:
经过两讲内容,终于把标签控件的主要知识讲完了。如果想了解更多的相关内容,可以查看MSDN。
转载于:https://www.cnblogs.com/Tang-tangt/p/9467578.html
VS2010-MFC(常用控件:标签控件Tab Control 下)相关推荐
- 1、Web 窗体的基本控件——标签控件(Label)
1.Web 窗体的基本控件--标签控件(Label) 标签控件(Label) 前端 <%@ Page Language="C#" AutoEventWireup=" ...
- 鸡啄米vc++2010系列32(标签控件Tab Control 下)
上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...
- 【自定义控件】c#winform自定义控件实现标签控件
介绍 首先我们设计这个控件的时候要明白控件是怎样交互的, 熟悉b站的小伙伴应该知道 ,我们上传视频的时候会去选择标签 ,我们输入标签文本 按下回车就代表该标签已经添加成功了,效果图如下! 控件拆分 我 ...
- VS2010/MFC编程入门教程之目录和总结
写这套VS2010/MFC编程入门教程历时八个月,时间比较长,都是鸡啄米在工作之余加班加点完成的.虽然有点累,但看到有这么多人过来支持鸡啄米,很是值得. 写每节教程我都力求讲明白,深入浅出的阐述每个知 ...
- VS2010/MFC编程入门
近来鼓捣2D小游戏的过程中发现鸡啄米大神很好的MFC系列资料,在此汗颜将地址扒拉了过来,留待以后慢慢学习. VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) (http://ww ...
- VS2010/MFC编程入门教程
一.VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入门之前言 VS2010/MFC编程入门之一(VS20 ...
- VS2010/MFC 编程入门教程之目录和总结
[原地址]:http://www.jizhuomi.com/software/257.html 鸡啄米这个网站不是很了解,但确实有很多好文章.自己工作需要,在vs2010 下学习mfc的知识,发现了这 ...
- VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)
前面两节为大家讲了列表视图控件List Control,这一节开始介绍一种特殊的列表--树形控件Tree Control. 树形控件简介 树形控件在Windows系统中是很常见的,例如资源管理器左侧的 ...
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...
- 鸡啄米之VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)
目录 一.目的: 1.点击列表框某个变量后,编辑框就显示出来这个变量名字 一.参考: 1.VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) ①总结:good:亲测有效,适合多 ...
最新文章
- Android中Handler
- echarts树图控件分析
- The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
- LeetCode 16 3Sum Closest
- LeetCode 1071. 字符串的最大公因子(字符串的最大公约数)
- 汇量科技收购热云数据,加速SaaS工具生态布局
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- oracle12 共享内存不存在,DBA警世录:Oracle的共享内存段
- js最基础知识回顾1(参数,函数,网页换肤)
- 重理工c语言实验指导书答案,C语言实验指导书自测练习参考答案
- 读C陷阱和缺陷(C Traps and Pitfalls)(一)
- 0xC0000005: 读取位置 xxx时发生访问冲突
- 交友 它能让霍金有一口伦敦腔,也在帮聋哑人重新开口说话
- android 系统 安卓8,安卓系统竟可以这么流畅!最快Android 8.0来了
- Package com.myapp signatures do not match the previously installed version
- Windows命令行下对文件做MD5校验
- ASEMI代理AD8606ACBZ-REEL7原装ADI车规级AD8606ACBZ-REEL7
- 利用win10镜像文件安装.net framework 3.5 简单快速
- flask android app socketio加解密 匿名加密聊天室 不被任何官方非官方机构个人监视的匿名聊天室!!! 想聊什么就聊什么!
- canvas粒子线条插件使用
热门文章
- 无人机计算机模拟飞行,学习无人机,怎么安装无人机模拟器?
- 数据结构算法与应用c++语言描述 pdf +源代码,数据结构算法与应用-c++语言描述(清晰版).pdf...
- 【python】ssh密码字典攻击
- AdventNet Agent Toolkit C Edition6 AGENT
- 【渝粤题库】广东开放大学 组织行为学 形成性考核
- 解决sql server挂起
- 戴尔服务器硬件查看信息工具omreport
- linux ps的a选项,linux下PS命令详解(转载)
- labview的RS232驱动程序
- python代理池搭建