在VC++中使用Tab Control控件

系统环境:Windows 7

软件环境:Visual Studio 2008 SP1

本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用

查阅MSDN文档,对于创建Tab Control控件,MSDN上说明如下:

To use CTabCtrl directly in a dialog box

1.     In the dialog editor, add a Tab Control to your dialog template resource. Specify its control ID.

2.     Use the Add Member Variable Wizard to add a member variable of type CTabCtrl with the Control property. You can use this member to call CTabCtrl member functions.

3.     Map handler functions in the dialog class for any tab control notification messages you need to handle. For more information, see Mapping Messages to Functions.

4.     In OnInitDialog, set the styles for the CTabCtrl .

To use CTabCtrl in a nondialog window

1.     Define the control in the view or window class.

2.     Call the control‘s Create member function, possibly in OnInitialUpdate, possibly as early as the parent window‘s OnCreate handler function (if you‘re subclassing the control). Set the styles for the control.

对于直接使用 CTabCtrl 在对话框内

1.          在对话框编辑区内,添加一个 Tab Control 控件到资源模板里面,设置它的控制 ID

2.          使用添加成员变量向导,为控件添加一个 CTabCtrl 类型的成员变量,你可以使用这个变量调用 CTabCtrl 的成员函数

3.          对话框类的映射处理功能可以处理任何你需要处理的标签控件消息。有关更多信息,请参阅消息映射函数。

4.          在 OnInitDialog() 函数里面,设置 CTabCtrl 的风格。

对于在非对话框窗口使用 CTabCtrl

1.          定义在视图或窗口类的控件。

2.          调用控件的创建成员函数,可能在 OnInitialUpdate 中,可能在父窗口的 OnCreate 处理函数早期(如果你是子类的控件)。设置控件的风格。

下面介绍在对话框中添加 Tab Control 控件,工程不一定是要 MFC 基于对话框形式,单文档视图类派生自 CFormView 的工程也行,或是任何工程弹出的对话框 ( 如登录界面等等 ) 都行 ( 个人没有都去实验,但理论上应该可以,看了下面就知道。 )

1.        首先在对话框资源上添加一个 Tab Control 控件 ID 为 IDC_LOGIN_TAB ,根据需要修改其属性,然后为其添加成员变量 m_tab ,类型为 CTabCtrl

2.        需要几个选项卡,则在对话框资源添加几个对话框,在这里我添加两个选项卡,则要添加两个对话框,其 ID 分别为 IDD_TAB1_DIALOG , IDD_TAB2_DIALOG 它们的属性 style 为 Child, Border 为 None ,其他的再根据自己调整。然后分别为其添加对应的基于 CDialog 类 CLoginTab1 , CLoginTab2

3.        在主对话框添加子对话框头文件,然后再添加三个成员变量,为子对话框添加实例。在 OnInitDialog() 函数初始化 Tab Control 控件显示,若对话框没有 OnInitDialog() 函数,则重载这个函数,具体如下:

[cpp] view plaincopy

//主对话框头文件

class LoginUser : public CDialog

{•••

protected:

virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

virtual BOOL OnInitDialog();            //没有这个,则在这里重载

DECLARE_MESSAGE_MAP()

public:

CTabCtrl m_tab;

CLoginTab1 m_login_tab1;

CLoginTab2 m_login_tab2;

•••

}

[cpp] view plaincopy

//主对话框实现文件

BOOL LoginUser::OnInitDialog()

{

CDialog::OnInitDialog();

m_tab.InsertItem(0,_T("系统登录"));

m_tab.InsertItem(1,_T("服务器设置"));

m_login_tab1.Create(IDD_TAB1_DIALOG,GetDlgItem(IDC_LOGIN_TAB));

m_login_tab2.Create(IDD_TAB2_DIALOG,GetDlgItem(IDC_LOGIN_TAB));

//获得IDC_TABTEST客户区大小

CRect rs;

m_tab.GetClientRect(&rs);

//调整子对话框在父窗口中的位置,根据实际修改

rs.top+=25;

rs.bottom-=60;

rs.left+=1;

rs.right-=10;

//设置子对话框尺寸并移动到指定位置

m_login_tab1.MoveWindow(&rs);

m_login_tab2.MoveWindow(&rs);

//分别设置隐藏和显示

m_login_tab1.ShowWindow(true);

m_login_tab2.ShowWindow(false);

//设置默认的选项卡

m_tab.SetCurSel(0);

return TRUE;

}

4.        响应选项卡切换事件消息,右键 Tab Control 控件,添加事件处理程序,选择 TCN_SELCHANGE 事件,在弹出的编辑区域,填入以下代码:

[cpp] view plaincopy

void LoginUser::OnTcnSelchangeLoginTab(NMHDR *pNMHDR, LRESULT *pResult)

{

// TODO: 在此添加控件通知处理程序代码

int CurSel = m_tab.GetCurSel();

switch(CurSel)

{

case 0:

m_login_tab1.ShowWindow(true);

m_login_tab2.ShowWindow(false);

break;

case 1:

m_login_tab1.ShowWindow(false);

m_login_tab2.ShowWindow(true);

break;

default: ;

}

*pResult = 0;

}

5.   编译运行。

接下来,来看看非模态对话框的实现,因为Tab Control控件要在对话框的OnInitDialog () 函数初始化,而MSDN上说:

After the dialog box and all of its controls are created but just before the dialog box (of either type) appears on the screen, the dialog object‘s OnInitDialog member function is called. For a modal dialog box, this occurs during the DoModal call. For a modeless dialog box, OnInitDialog is called when Create is called. You typically override OnInitDialog to initialize the dialog box‘s controls, such as setting the initial text of an edit box. You must call the OnInitDialog member function of the base class, CDialog , from your OnInitDialog override.

非模态对话框是在Create的时候一起调用初始化函数的,OnInitDialog()我们仍可以重载这个函数,来实现以上功能。对于单文档/多文档可以看前面的MSDN说明,这里不再详细写。本文若有错误,请指出。

原文地址:https://www.cnblogs.com/blogpro/p/11426827.html

时间: 2024-10-11 20:43:38

在VC++中使用Tab Control控件的相关文章

基于wince的MFC Tab Control控件的使用

1,先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上. 再在对话框类中,声明一个CTabCtrl变量: CTabCtrl m_tab; 变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句: 1 //{{AFX_DATA_MAP(CTABDlg) 2 DDX_Control(pDX, IDC_TAB, m_tab); 3 //}}AFX_DATA_MAP IDC_

转:Tab Control控件的详细使用

1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.    3. 在对话框的初始化函数OnInitDia

MFC编程 | tab control控件的使用

因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // tab control控件的使用 // 建立一个Cluster窗口,通过tab可以切换成C-Means和Fuzzy C-Means窗口 1.插入对话框((ID:IDD_DIG_CLUSTER),删去默认生成的控件“OK”和“Cancel”后,插入一个tab control控件(ID:IDC_TAB).通过类向导,给此对话框定义一个类CCluster,给tab控件定义变量m_tab. 2.插入另外两个对话框作为C-Me

通过编写串口助手工具学习MFC过程——(七)添加Tab Control控件

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (七)添加Tab Control控件 要在对话框里添加标签页,点击标签页上

C++ MFC Tab Control控件的详细使用

1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish.?2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.?3. 在对话框的初始化函数OnInitDialog

OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中

OpenCV 2.2 以及后面的版本取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序员无法调用里面的显示函数来将图片显示到 MFC 的 Picture Control 控件中.为此,网上很多人表示只要将那两个文件人为的提取出来然后放到工程里面就解决问题了,也提供了两个文件的下载,但是这麻烦不说,还会导致一些奇奇怪怪的报错(至少本人是这样的,很崩溃!).所以在了解了一些gdi绘图之后结合网上的代码写了如下的函数,只需调用就可以将OpenCV的图片显示在上面

OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中

OpenCV 2.2 以及后面的版本号取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序猿无法调用里面的显示函数来将图片显示到 MFC 的 Picture Control 控件中.为此,网上非常多人表示仅仅要将那两个文件人为的提取出来然后放到project里面就解决这个问题了,也提供了两个文件的下载,可是这麻烦不说.还会导致一些奇奇怪怪的报错(至少本人是这种,非常崩溃!).所以在了解了一些gdi画图之后结合网上的代码写了例如以下的函数,仅仅需调用就能够将O

怎样在VS2013/MFC中使用TeeChart绘图控件

TeeChart作为一款强大好用的绘图控件,通过它可以绘制出各式各样的图表,包括2D的,还有3D的,绘制的图表美观实用,这里主要讲述如何在VS2013/MFC中使用TeeChart控件,顺便说一下在VS2013中如何创建MFC项目. 工具/原料 Visual studio 2013 TeeChart.pro.v5.ActiveX 方法/步骤 1 在网上下载TeeChart控件并安装,安装自然不用多说,安装完后找到安装路径(带有TeeChart5.ocx文件),复制当前路径 2 安装完后需要对控件

MFC List Control控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作

作为现代的软件,往往是连着数据库的,而连着和用户方便地操作之间,还有着界面这道坎.MFC是Windows上比较好开发用户界面的框架,然而其自带的控件中没有对于数据库表格支持较好的控件,而使用网上提到的 DataGrid 等控件在本人的win8.1+VS2013平台上老出现找不到控件或者头文件的问题,搞的烦死人.最后想到 List Control 控件只要稍作修改,加上单元格编辑和单元格下拉列表,其实就能和数据库进行良好的对接,一百度,果然有人已经做了这件事,实在是太让人感动了!