- 浏览: 45128 次
- 性别:
- 来自: 河北
最新评论
1.标签控件
标签(tab)控件也称选项卡控件,在功能上类似一个文件柜上的标签。标签控件由多个页面组成。每个页面都配有一个带有标题的标签,当用户单击一个标签就显示对应的页面。Windows应用程序大量使用标签控件,如利用Visual C++进行对话框编程时经常用到的Properties对话框就使用了标签控件。
标签控件作为一个控件一般需要放在一个对话框上,同时一个标签控件由多个标签页组成,每个标签页一般又与一个对话框对应。编程时使用标签控件,就可以在一个窗口的相同区域定义多个标签页,其中每个标签页的对话框上可以使用不同的控件,分别实现不同的对话功能。
但要注意一点,标签是作为一个控件而使用,由于它不是对话框,因此编程时不能直接在各个标签页上添加控件,只能 在选中不同标签时在相同位置显示含有不同控件的对话框。如同一般MFC编程那样,这些对话框可以作为资源滔天大罪中到项目中,标签控件实现的是在不同标签页对话框窗口之间的切换,而不只是标签页的显示切换。
标签控件可以设置的属性有很多,主要属性有:Alignment下拉框用于设置每个标签的宽度为Right Justify(自动随标题长度调节,默认值)或Fixed Width(固定宽度);Buttons表示标签采用按钮形状;Multiline表示标签可以多行的形式显示;Hottrack表示当光标通过一个标签时标签的标题呈蓝色;Button表示标签位于控件的底端;Vertical表示标签以垂直的方式出现。
要实现标签的切换功能,必须对标签控件的有关消息进行处理。当用户鼠标单击某个标签时,标签向父窗口发送通知消息NM_CLICK。当用户选择不同的标签时,分别发送消息TCN_SELCHANGEING(标签切换之前)和TCN_SELCHANGE(标签切换后)。在消息处理函数可以调用MFC标签控件类的成员函数返回当前所选择的标签。
MFC类CTabCtrl提供了标签控件的各项服务功能,通过其成员函数实现了对控件及其数据结构的操作。编程时常用的成员函数有:函数InsertItem()或DeleteItem()用于插入或删除一个标签,函数GetCurlSel()或SetCurlSel()用于获取所选择标签的索引号或设置当前标签。在CTabCtrl类的很多成员函数中都用到一个TCIITEM结构(取代了IC_ITEM结构)的参数,该结构用于设置每一个标签的属性,其组成如下:
typedef struct tagTCITEM { UINT mask; //TCIF_掩码,用于指明结构中哪些成员有效 DWORD dwState; //标签页的当前状态 DWORD dwStateMask; //dwState掩码,指明成员dwState中哪些有效 LPTSTR pszText; //标签标题 int cchTextMax; //标签标题字符的最长度 int iImage; //与标签关联的图像列表的索引,若没有则为-1 LPARAM lParam; //应用程序自定义的与标签页相关的数据 }TCITEM;
例如,下面的代码向标签控件添加一个标题为My TabPage的标签页
CTabCtrl m_TabCtl; //创建一个标签控件 TCITEM tci; //声明一个TCITEM结构 tci.mask=TCIF_TEXT; //指明结构体成pszText有效 tci.pszText="My TabPage";//标签名为My TabPage m_TabCtl.InsertItem(0,&tcl);//将这个标签页作为标签控件的第1个标签
2.属性表
属性表(property sheet)又称属性对话框其形式和功能类似于前介绍的标签对话框。MFC提供了实现属性表的两个类;CPropertySheet和CPropertyPage。一个属性表由一个CPopertySheet类的对象和多个CPropertyPage类的对象构成,其中,CPropertySheet类或其派生类对象代表一个属性表,CPropertyPage派生类对象代表每个不同的属性页。
虽然CPropertySheet类是派生于CWnd类而不是CDialog类,但属性表的使用方法与对话框类似,即先调用成员函数DoModal()创建一个模态属性表,或调用成员函数Create()创建一个非模态属性表。
一个属性页对应一个对话框,实际上一个属性页就是一个对话框,CPropertyPage类是派生类于CDialog类。因此可以对话框编辑器为每个属性页添加控件,并可以利用类向导ClassWizard创建派生类,添加与控件关联的成员变量和消息处理函数。
属性表编程的主要步骤总结如下:
(1)为每个属性页创建属性对话框资源。
(2)为每个属性对话框添加控件。
(3)为每个属性对话框创建CPopertyPage类的派生类,并添加成员变量和消息处理函数。
(4)如果需要可以创建一个自已的属性表,它是CPropertySheet类的派生类。
(5)在程序需要的地方(如菜单命令处理函数中)定义一个CPropertySheet类或其派生类对象(即属性表),并定义所有的CPropertyPage派生类对象(即属性页),通过调用AddPage()函数将属性页加入到属性表,最后显示该属性表。
例 编写一个SDI应用程序PropSt,利用属性表实现选项卡功能。
[编程说明与实现]
(1)利用MFC AppWizard向导创建一个SDI应用程序PropSt,为了减少重复工作,利用Copy和Paste命令将项ExmpTabCtrl中的两个标签页对话框资源复制到本项目。两个对话框将作为属性页使用,因此必须重新设置两个对话框的一些属性。设置对话框的Child属性、Border边界的Thin属性和Title bar属性,恢复原来标题“使用组合框”和“使用公共控件”。然后利用ClassWizard分别创建对话框类CComboDlg和CComctlDlg。也可以通过Insert|Resource|Dialog|IDD_PROPAGE命令为项目添加一个新属性页资源。
(2)利用“复制”和“粘贴”命令将项目ExmpTabCtrl中两个对话框类定义的头文件ComboDlg.h、ComctlDlg.h和实现文件ComboDlg.cpp、ComctlDlg.cpp复制到本项目,并将实现文件中开头位置所包含的应用程序类头文件改PropSt.h。利用Edit|Replace命令将两个对话框类的头文件和实现文件中的基类CDialog替换为CPropertyPage。派生的属性表类CComboDlg和ComctlDlg的构造函数调用了基类CPropertyPage()的构造函数,但通过Replace命令得到的构造函数的参数不匹配,必须去掉CPropertyPage()构造函数中的参数pParent。
(3)添加菜单项"测试|属性表",其ID为ID_TEST_PROPSHEET。利用类向导ClassWizard为视图类CPropStView添加该菜单项的命令处理函数,在函数中生成一个属性表和两个属性页,并通过调用AddPage()函数将属性页加入到属性表,最后显示该属性表。当用户单击“确定”按钮时根据输入的数据绘制一个圆。
void CExmpTabCtrlView::OnTestPropsheet() { // TODO: Add your command handler code here CPropertySheet MySheet("使用属性表"); //生成一个属性表 CComboDlg page1; //生成第一个属性页 MySheet.AddPage(&page1); //将第一个属性页加入到属性表 CComctlDlg page2; //生成第二个属性页 MySheet.AddPage(&page2); //将第二个属性加入到属性表 if(MySheet.DoModal()!=IDOK) return; Invalidate(); UpdateWindow(); CClientDC dc(this); CPen penNew,*ppenOld; penNew.CreatePen(PS_SOLID,page2.m_nLineWt,RGB(0,0,0)); ppenOld=dc.SelectObject(&penNew); dc.Ellipse(0,0,2*page2.m_nRadius,2*page2.m_nRadius); dc.SelectObject(ppenOld); }
在文件PropStView.cpp的开头位置加入包含属性页类头文件的语句
#include "ComboDlg.h" #include "ComctlDlg.h"
- ExmpTabCtrl.rar (1.9 MB)
- 描述: 选项卡的实例
- 下载次数: 39
- PropSt.rar (1.9 MB)
- 描述: 属性页实现选项卡的实例
- 下载次数: 27
发表评论
-
MFC的打印
2009-05-24 17:05 0虽然Windows通过 ... -
ActiveX控件
2009-05-23 15:49 6646ActiveX是Microsoft提出的使用组件对 ... -
多线程
2009-05-22 18:57 0Windows对CPU的管理的采取时间片分配的方式 ... -
动态链接库DLL
2009-05-22 14:38 0为了提高系统 ... -
异常处理
2009-05-21 19:06 2054异常(exception)是指在程序运行过程中发生 ... -
MFC ODBC数据库类
2009-05-20 19:44 73421.ODBC概述 ... -
对话框高级编程---公共控件之四(树视控件)
2009-05-19 21:45 2341树视(tree view)控 ... -
对话框高级编程---公共控件之四(列表视控件)
2009-05-19 14:01 0列表视(list view)控件也称列表控件,属 ... -
对话框高级编程---公共控件之三(图像列表)
2009-05-18 21:22 0图像列表(image list)是一个由一些大小相同 ... -
对话框高级编程---公共控件之一(旋转按钮、滑块和进度条)
2009-05-18 11:09 01.旋转按钮 ... -
对话框高级编程---通用对话框
2009-05-17 21:17 17841.通用对话框概 ... -
对话框高级编程---非模态对话框
2009-05-16 21:39 0尽管不同对话 ... -
图形处理---位图、图标和光标
2009-05-16 20:33 21661.位图 例1 编写一个应用程序MyB ... -
图形处理---位图,图标和光标
2009-05-16 20:16 01.位图 例1 编写一个应用程序MyBMP ... -
图形处理---位图、图标和光标
2009-05-16 19:58 01.位图 例1 编写一个应用程序MyBMP ... -
文本与字体
2009-05-16 16:23 01.绘制文本 以图形方式进行文本的输 ... -
图形处理---基本几何图形的绘制
2009-05-15 21:27 0获取设备环境、设置绘图属性和选择GDI绘图对象后,就 ... -
图形处理---画笔和画刷
2009-05-15 17:30 0进行绘图除了需 ... -
图形处理---颜色的设置
2009-05-15 16:08 0在绘制图形时,颜色是一个需要考虑的因素。Window ... -
用CDC绘制简单图形
2009-05-14 20:47 0绘图 1. 几种不同设备环境 MFC的CDC类封装了设 ...
相关推荐
旋转按钮的实例 博文链接:https://fpwjp.iteye.com/blog/390451
图像列表的实例 博文链接:https://fpwjp.iteye.com/blog/390790
列表视控件的实现 博文链接:https://fpwjp.iteye.com/blog/391145
NULL 博文链接:https://fpwjp.iteye.com/blog/391437
商业编程-源码-ljh Dialog 弹出对话框控件.zip
精彩编程与编程技巧-从公共对话框控件中提取多个文件名称 ...
属性对话框控件是在Windows系统中是常见的控件,那么在VC++中实现自定义的属性对话框控件后,会给我们的Windows应用的用户操作带在非常大的方便。学习综合使用属性对话框、弹出菜单等功能会给我们的VC++应用的功能...
商业编程-源码-为对话框中的控件增加提示的简单方法.zip
商业编程-源码-在对话框程序中使用动画控件.zip
控件-通用对话框 控件-数据源 控件-数据提供者-数据库提供者 控件-数据报 控件-树形框 控件-时钟 控件-日期框-月历 控件-驱动器框 控件-命令条及状态条 控件-列表框 控件-进度条 控件-画板 控件-滑块条 ...
本书全面介绍创建功能强大的Windows应用程序的各种高级编程技术。具体内容包括:利用各种控件创建图形用户界面,在Windows应用程序中使用图形和GDI+,在标准Windows文件中加载和保存数据,通过应用程序打印信息,开发能够...
vc中关于对话框的编程,添加各种控件,实现各种控件的基本使用
VS2010-MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)-软件开发-鸡啄米 VS2010-MFC编程入门之二十三(常用控件:按钮控件的编程实例)-软件开发-鸡啄米 VS2010-MFC编程入门之二十四...
商业编程-源码-可以按比例缩放拥有的控件的对话框源代码.zip
Windows 应用高级编程--C#编程篇 作者:〔美〕杰汉森,〔美〕雷诺德 著,张哲峰 译 出版社:清华大学出版社 出版时间:2003年01月 第1章 Windows编程基础 1.1 Windows和窗体 1.1.1 Windows窗体的概念...