VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)
前面两节鸡啄米讲了树形控件Tree Control,本节开始讲解标签控件Tab Control,也可以称为选项卡控件。
标签控件简介
标签控件也比较常见。它可以把多个页面集成到一个窗口中,每个页面对应一个标签,用户点击某个标签时,它对应的页面就会显示。下图是Windows系统配置中标签控件的例子:
使用标签控件我们可以同时加载多个有关联的页面,用户只需点击标签即可实现页面切换,方便灵活的进行操作。每个标签除了可以显示标签文本,还可以显示图标。
标签控件相当于是一个页面的容器,可以容纳多个对话框,而且一般也只容纳对话框,所以我们不能直接在标签控件上添加其他控件,必须先将其他控件放到对话框中,再将对话框添加到标签控件中。最终我们点击标签切换页面时,切换的不是控件的组合,而是对话框。
标签控件的通知消息
在对标签控件进行一些操作,比如点击标签时,标签控件也会向父窗口发送一些通知消息。我们可以为这些通知消息添加处理函数,实现各种功能。标签控件的主要通知消息及含义如下所示:
TCN_SELCHANGE:通知父窗口控件的标签选择项已经改变
TCN_SELCHANGING 通知父窗口控件的标签选择项正在改变
TCN_KEYDOWN:通知父窗口在控件范围内键盘被按下
TCN_GETOBJECT:具有TCS_EX_REGISTERDROP扩展特性并且对象被拖动时的通知消息
TCN_FOCUSCHANGE:通知父窗口控件的按钮聚焦已经改变
NM_CLICK:通知父窗口用户在控件区域范围内点击了鼠标左键
NM_RCLICK:通知父窗口用户在控件区域范围内点击了鼠标右键
NM_RELEASEDCAPTURE:通知父窗口在控件区域范围内释放鼠标捕获消息
标签控件的相关结构体
标签控件在使用中也有一些相关的结构体经常用到,主要以下几个:
1. TCITEMHEADER结构体
该结构体用来指定或获取标签控件本身的属性。用在TCM_INSERTITEM、TCM_GETITEM和TCM_SETITEM消息中。
- typedef struct tagTCITEMHEADER {
- UINT mask; // 掩码,可以为TCIF_IMAGE(iImage成员有效)、TCIF_RTLREADING、TCIF_TEXT(pszText成员有效)
- UINT lpReserved1; // 预留
- UINT lpReserved2; // 预留
- LPTSTR pszText; // 标签文本字符串
- int cchTextMax;
- int iImage; // 图标在标签控件图像序列中的索引
- } TCITEMHEADER, *LPTCITEMHEADER;
2. TCITEM结构体
该结构体用来指定或获取标签页的属性。用在TCM_INSERTITEM、TCM_GETITEM和TCM_SETITEM消息中。
- typedef struct tagTCITEM {
- UINT mask; // 掩码,可以是TCIF_IMAGE(iImage成员有效)、TCIF_PARAM(lParam成员有效)、TCIF_RTLREADING、TCIF_STATE、TCIF_TEXT(pszText成员有效)
- #if (_WIN32_IE >= 0x0300)
- DWORD dwState;
- DWORD dwStateMask;
- #else
- UINT lpReserved1;
- UINT lpReserved2;
- #endif
- LPTSTR pszText;
- int cchTextMax;
- int iImage;
- LPARAM lParam; // 与标签页关联的32位数据
- } TCITEM, *LPTCITEM;
3. TCHITTESTINFO结构体
该结构体包含了鼠标单击测试的信息。
- typedef struct tagTCHITTESTINFO {
- POINT pt; // 鼠标点击测试的客户区坐标
- UINT flags; // 接收点击测试的结果。有以下几种:TCHT_NOWHERE(坐标点不在标签上)、TCHT_ONITEM(坐标点在标签上但不在标签文本或图标上)、TCHT_ONITEMICON(坐标点在标签图标上)、TCHT_ONITEMLABEL(坐标点在标签文本上)
- } TCHITTESTINFO, *LPTCHITTESTINFO;
4. NMTCKEYDOWN结构体
该结构体包含了标签控件中键盘按下的相关信息。主要用在TCN_KEYDOWN通知消息中。
- typedef struct tagNMTCKEYDOWN {
- NMHDR hdr;
- WORD wVKey;
- UINT flags;
- } NMTCKEYDOWN;
标签控件的上半部分就讲到这里了,下节教程鸡啄米将继续讲解标签控件的知识和应用实例。
转自:http://www.jizhuomi.com/software/181.html
相关文章
- Storm实时计算:流操作入门编程实践
- [高并发]Java高并发编程系列开山篇--线程实现
- Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年(内含超全知识大图)
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十三节:Shell编程入门(五)
- PHP socket编程需要了解的一些基本知识
- 计算机视觉 基于CUDA编程的入门与实践 线程及同步二
- Python3 GUI编程入门程序示例
- ASP.NET Core应用基本编程模式[3]:配置多种使用形式
- 网络编程之一泡尿的时间,快速读懂QUIC协议
- 《导航贴》-Scratch编程案例
- Computer:编程入门的简介之面向对象的简介(优点/特点)、面向过程和面向对象的对比之详细攻略
- 【项目实战】并发编程之Java集合框架中的一个线程安全的队列实现 ——BlockingQueue入门介绍
- 【编程思想】理解面向过程(OPP)、面向对象(OOP)、面向切面(AOP)
- 新手学编程:代码重构入门-进阶
- 从C、C++、Java到Python,编程入门到底学什么语言好?
- Pyhton编程:解决python2中文编码乱码
- Python编程:腾讯防水墙原理浅析与Flask结合测试
- Python编程:Flask扩展Flask-WTF和Flask-SQLAlchemy应用实例
- Python编程:通过实例理解闭包
- Kotlin 并发编程之"协程"
- 编程算法 - 有序双循环链表的插入 代码(C)
- 19.第六章 Shell脚本编程基础入门 -- shell 脚本语言的基本用法(二)
- c++ 泛型编程
- LabVIEW编程LabVIEW选择稳定的开发者
- LabVIEW编程LabVIEW控制滨松相机例程与相关资料
- 《Java并发编程的艺术》精要整理原创 Django Java工程师成长日记
- Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)
- 编程入门先学什么?零基础转行编程难不难?
- 第一章 C++编程基础——1.2对象的定义与初始化
- 开发成长之路(2)-- C语言从入门到开发(讲明白指针和引用,顺带讲解多文件编程)