`
fpwjp
  • 浏览: 45968 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

对话框高级编程---公共控件之二(标签控件和属性表)

    博客分类:
  • C++
阅读更多

      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"

 

  • PropSt.rar (1.9 MB)
  • 描述: 属性页实现选项卡的实例
  • 下载次数: 27
分享到:
评论

相关推荐

    对话框高级编程---公共控件之一(旋转按钮、滑块和进度条)

    这篇博客“对话框高级编程——公共控件之一(旋转按钮、滑块和进度条)”主要探讨了三种常用的公共控件:旋转按钮(Spin Button)、滑块(Slider)和进度条(Progress Bar),并提供了源码示例。这些控件在很多应用...

    对话框高级编程---公共控件之四(树视控件)

    总结来说,"对话框高级编程---公共控件之四(树视控件)"这个主题涵盖了Windows编程中关于树视图控件的基本操作和高级用法。通过学习和实践,开发者可以提升在对话框设计中的用户体验,创建出更直观、易用的层级结构...

    对话框高级编程---公共控件之四(列表视控件)

    本文将深入探讨对话框高级编程中的“公共控件”——列表视控件,通过源码和工具来解析其实现过程。 首先,列表视控件(List View Control)是Windows API提供的一种控件,它可以以多种视图模式展示数据,如图标、小...

    对话框高级编程---公共控件之三(图像列表)

    在Windows编程中,对话框(Dialog Box)是用户与应用程序交互的重要组件,它可以包含各种控件,如按钮、文本框、列表视图等。而“图像列表”(Image List)则是对话框中一种非常实用的控件,它可以用于管理一组小...

    对话框高级编程---非模态对话框

    在本文中,我们将深入探讨非模态对话框的高级编程技术,包括其工作原理、创建过程以及如何在实际项目中应用。 非模态对话框(Non-Modal Dialog)与模态对话框(Modal Dialog)的最大区别在于用户可以同时操作主窗口...

    Vc++的对话框小程序--简单计算器

    这个项目涉及到了许多核心的编程概念和技术,包括MFC(Microsoft Foundation Classes)、控件的使用、事件处理以及对话框的布局管理。下面将详细阐述这些知识点。 首先,VC++中的MFC库为开发者提供了构建Windows...

    商业编程-源码-ljh Dialog 弹出对话框控件.zip

    总的来说,"ljh Dialog 弹出对话框控件"是一个针对商业编程的源码组件,旨在提供高效、可定制和易用的对话框解决方案。通过深入研究和应用这个控件,开发者可以更好地掌握对话框设计和实现的技巧,进一步提升其软件...

    关于VC++中属性对话框的编程

    属性对话框控件是在Windows系统中是常见的控件,那么在VC++中实现自定义的属性对话框控件后,会给我们的Windows应用的用户操作带在非常大的方便。学习综合使用属性对话框、弹出菜单等功能会给我们的VC++应用的功能...

    对话框修改UI-易语言.zip

    这通常需要指定对话框的模板,模板决定了对话框的布局和控件。 3. **自定义对话框控件**: 易语言允许用户添加各种控件到对话框上,如文本框、按钮、列表框、复选框等。通过“创建控件”命令,并指定控件类型、...

    MFC基于对话框小程序-24小游戏 (附源代码)

    在编译和打包过程中,开发者通常会使用Visual Studio的资源编辑器来设计对话框布局,然后通过设置项目属性,将源代码、资源文件和依赖库打包成可执行文件,如24点游戏.exe。打包后的程序可以在没有开发环境的计算机...

    精彩编程与编程技巧-从公共对话框控件中提取多个文件名称...

    #### 二、从公共对话框中提取多个文件名 本节主要介绍如何在Visual Basic中通过公共对话框控件来获取用户选择的多个文件名称。这对于开发涉及文件操作的应用程序非常有用。 #### 三、代码实现步骤 1. **初始化...

    商业编程-源码-为对话框中的控件增加提示的简单方法.zip

    "商业编程-源码-为对话框中的控件增加提示的简单方法.zip" 这个压缩包文件,显然包含了如何在对话框的各个控件上添加提示信息的源代码示例。这些提示通常称为“工具提示”或“气泡提示”,它们可以在用户将鼠标悬停...

    vc中的对话框编程,各种控件的使用方法

    以上是VC++中对话框编程的基本知识和控件使用方法,实际开发中可能需要根据具体需求进行更复杂的定制和扩展。通过熟练掌握这些技能,开发者可以创建出丰富多样的用户界面,提高应用的易用性和用户体验。

    商业编程-源码-在对话框程序中使用动画控件.zip

    这个压缩包“商业编程-源码-在对话框程序中使用动画控件.zip”显然包含了关于如何在对话框程序中集成和操作动画控件的源代码示例。 首先,我们要理解什么是对话框程序。对话框程序是Windows操作系统中的一种用户...

    【易语言】控件大全使用教程

    控件-通用对话框 控件-数据源 控件-数据提供者-数据库提供者 控件-数据报 控件-树形框 控件-时钟 控件-日期框-月历 控件-驱动器框 控件-命令条及状态条 控件-列表框 控件-进度条 控件-画板 控件-滑块条 ...

    商业编程-源码-如何实现由列表控件控制的属性表.zip

    8. **界面更新**:为了确保用户界面的即时更新,你需要在属性页中添加适当的控件(如编辑框、复选框等)来显示和修改属性,并处理这些控件的事件,以保持列表控件和属性表的一致性。 9. **代码实现**:在C++中,你...

Global site tag (gtag.js) - Google Analytics