【vb精品源码栏目提醒】:网学会员vb精品源码为您提供vc6.0_tab控件的使用 - 其它资料参考,解决您在vc6.0_tab控件的使用 - 其它资料学习中工作中的难题,参考学习。
vc6.0 tab 控件的使用MFC 中使用 TAB Control 控件(转) View 是 Form View, 假如我现在有个 SDI 程序, 想在上面放个 Tab Control,包含两个 Page。
现在让我们来看看应该怎样处理。
首先当然要增加一个 Tab Control 资源, 在 然后利用 Class Wizard, View 中增加一个 Control变量。
接着建立两个对话框资源,别忘了把 Style 改为 Child,Border 改为 None。
然后就可以在上面加其他控件了。
接着利用 Class Wizard,分别为这两个对话框建立两个类,比如 CPage1 和 CPage2。
然后在 View 类头文件中,加入这两个对话框对象。
同时增加一个变量 int m_CurSelTab,用了表明是哪个 Page 即将被切换。
为了避免用户在切换 Tab 时,程序对 Tab Index 的枚举,可以利用数组来做这个事情。
在 View 的初始化函数中需要把 CPage1、CPage2 和 Tab Control 关联起来,并保存页面地址,设置初始页面,等等。
void CTab_testView::OnInitialUpdate CFormView::OnInitialUpdate GetParentFrame-RecalcLayout ResizeParentToFit //为 Tab Control 增加两个页面 m_tab.InsertItem0 _TFirst m_tab.InsertItem1 _TSecond //创建两个对话框 m_page1.CreateIDD_DIALOG1 m_tab m_page2.CreateIDD_DIALOG2 m_tab //设定在 Tab 内显示的范围 CRect rc m_tab.GetClientRectrc rc.top 20 rc.bottom - 8 rc.left 8 rc.right - 8 m_page1.MoveWindowrc m_page2.MoveWindowrc //把对话框对象指针保存起来 pDialog0 m_page1 pDialog1 m_page2 //显示初始页面 pDialog0-ShowWindowSW_SHOW pDialog1-ShowWindowSW_HIDE //保存当前选择 m_CurSelTab 0这里面需要注意的是,我用了一个 CDialog 指针数组来进行保存,数组的大小是 Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。
用户切换时,需要响应相关的消息。
void CTab_testView::OnSelchangeTab1NMHDR pNMHDR LRESULT pResult// TODO: Add your control notification handler code here pDialogm_CurSelTab-ShowWindowSW_HIDE m_CurSelTab m_tab.GetCurSel pDialogm_CurSelTab-ShowWindowSW_SHOWpResult 0首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。
这比一个个去枚举简单多了。
还有一点比较有意思,那就是 DDX/DDV 机制的运用。
要想获得 Tab Control 各个页面的数据,可以利用 DDX/DDV 机制,但需要注意,因为这是多个页面,所以需要显式调用多次。
void CTab_testView::OnButton1// TODO: Add your control notification handler code here m_page1.UpdateData m_page2.UpdateData CString str1 m_page1.m_str1 CString str2 m_page2.m_str2 AfxMessageBoxstr1 AfxMessageBoxstr2经过这几步处理,基本上我们就可以利用 Tab Control 的强大功能了。
===================================VC 之 TAB 控件实例对于用惯了
VB 和 VC的我来说,VC 控件真是太麻烦了,不过有什么办法呢?许多企业还在使用,所以继续学习,咸淡算扯到这了,这里做了个最为简单的 Tab Control 的使用范例。
1. 在主面板上拖放一 Tab Control 控件,我们这里建立其在主面板类(CTabSampleDlg)里面的成员变量 m_tab。
2.添加两个子对话框,将其属性设置为“child,none”。
这里要注意了,添加的必须是继承自DIALOG 类的对话框,而不是 PropPage 对话框,否则的话,子面板将不能响应用户操作。
然后生成两个新类“CTabPage1, CTabPage2”。
3.为 CTabSampleDlg 类 添加两个成员变量,他们分别是 CTabPage1 和 CTabPage2 类的实例。
4.在 CTabSampleDlg 类的 OnInitDialog 成员函数内的适当位置添加如下代码。
BOOL CTabSampleDlg::OnInitDialogCDialog::OnInitDialog// Add About... menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERTIDM_ABOUTBOX 0xFFF0 IDM_ABOUTBOXASSERTIDM_ABOUTBOX 0xF000CMenu pSysMenu GetSystemMenuFALSEif pSysMenu NULL CString strAboutMenu strAboutMenu.LoadStringIDS_ABOUTBOX if strAboutMenu.IsEmpty pSysMenu-AppendMenuMF_SEPARATOR pSysMenu-AppendMenuMF_STRING IDM_ABOUTBOX strAboutMenu // Set the icon for this dialog. The framework does this automatically// when the applications main window is not a dialogSetIconm_hIcon TRUE // Set big iconSetIconm_hIcon FALSE // Set small icon////初始化 TABTCITEM tc1tc2tc1.mask TCIF_TEXTtc1.pszText 第一页tc2.mask TCIF_TEXTtc2.pszText 第二页m_tab.InsertItem0 tc1m_tab.InsertItem1 tc2 //到这里只是添加了两个 tab 页CRect recm_tab.GetClientRectrec//获得 TAB 控件的坐标//定位选项卡页的位置,这里可以根据情况自己调节偏移量rec.bottom - 1rec.left 1rec.top 20rec.right - 2//创建子页面m_page1.CreateIDD_DIALOG1 GetDlgItemIDC_TABm_page2.CreateIDD_DIALOG2 GetDlgItemIDC_TAB//将子页面移动到指定的位置m_page1.MoveWindowrecm_page2.MoveWindowrec//显示子页面m_page1.ShowWindowSW_SHOWm_page2.ShowWindowSW_HIDE//return TRUE // return TRUE unless you set the focus to a control5. 为主面板上的 TabControl 控件添加 OnSelchangeTab 事件, 添加代码如下。
void CTabSampleDlg::OnSelchangeTabNMHDR pNMHDR LRESULT pResult// TODO: Add your control notification handler code here switch m_tab.GetCurSel case 0: m_page1.ShowWindowSW_SHOW m_page2.ShowWindowSW_HIDE break case 1: m_page1.ShowWindowSW_HIDE m_page2.ShowWindowSW_SHOW break default: break pResult 0======================================Tab Control 控件的应用前几天在网上搜了点资料,是关于 Tab Control 控件的应用,当时还做了一遍,今天再做有点生疏了,总是忘了点什么。
于是总结在这儿,一是为以后使用提供方便,再是供大家参考。
首先,新建一个基于对话框的 MFC 应用程序,添加 Tab Control 控件,并为其添加变量CTabCtrl m_tab;然后,新建两个对话框,均设置属性如下这步很重要:Style--Child,Border--None;然后分别添加一个文本框。
分别为这两个对话框建立新类 CPage1 和 CPage2。
该程序用了一个 CDialog 的指针数组来进行保存各个页面,数组的大小是 Tab Control 页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。
声明变量:CDialogpDialog2,并且添加一个 int 型变量用于保存当前活动的页面索引,int m_CurSelTab;接着,在 OnInitDialog 函数中添加如下代码: //为 Tab Control 增加两个页面 m_tab.InsertItem0 _TFirst m_tab.InsertItem1 _TSecond //创建两个对话框 m_page1.CreateIDD_DIALOG1 m_tab m_page2.CreateIDD_DIALOG2 m_tab //设定在 Tab 内显示的范围 CRect rc m_tab.GetClientRectrc rc.top 20 rc.bottom - 8 rc.left 8 rc.right - 8 m_page1.MoveWindowrc m_page2.MoveWindowrc //用数组把对话框对象指针保存起来 pDialog0 m_page1 pDialog1 m_page2 //显示初始页面 pDialog0-ShowWindowSW_SHOW pDialog1-ShowWindowSW_HIDE //保存当前选择 m_CurSelTab 0这样就可进行正常的显示了,如果响应页面切换这个事件,可以为 Tab Control 控件添加消息响应函数:OnSelchangeTab,并在该函数中添加如下代码: //得到页面的数据 CString str ifm_CurSelTab0 m_page1.UpdateDataTRUE m_page1.GetDlgItemIDC_EDIT_PAGE1-GetWindowTextstr ifm_CurSelTab1 m_page2.UpdateDataTRUE m_page2.GetDlgItemIDC_EDIT_PAGE2-GetWindowTextstr MessageBoxstr //首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。
这比一个个去枚举简单多了。
pDialogm_CurSelTab-ShowWindowSW_HIDE m_CurSelTab m_tab.GetCurSel pDialogm_CurSelTab-ShowWindowSW_SHOW经过这几步处理,一个简单的 Tab Contrl 控件应用程序就完成了。
=====================================VC Tab Control 控件的使用1. 新建一个 MFC 工程 取名 MyTab 选择 Dialog based 然后 Finish.2. 删除对话框上默认添加的三个控件. 添加 Tab Control 控件并在 Property 属性中设置 ID 为IDC_TABTEST 在 More Styles 里勾上 Bottom. 调速尺寸使其布满整个对话框 我这边 TabControl 的尺寸最后为 164X203. 在 ClassWizard 为其添加变量 变量名为 m_tab. 类型为CTabCtrl.3. 在对话框的初始化函数 OnInitDialog 里面添加如下代码:m_tab.InsertItem0参数一 //添加参数一选项卡m_tab.InsertItem1参数二 //添加参数二选项卡m_tab.InsertItem2结果 //添加结果选项卡4.在对话框资源里面添加三个对话框资源 ID 分别命名为 IDD_PARA1 IDD_PARA2IDD_RESULT. 字体为宋体 字号为 9 style 为 Child Border 为 None 宽度调整为 161. 再分别为其添加对应的基于 CDialog 类 CPara1 CPara2 CResult.5. 在 CMyTabDlg 类中添加三个成员变量 m_para1 m_para2 m_result 分别是三个子对话框的实例. 代码如下:CResult m_resultCPara2 m_para2CPara1 m_para16. 在 IDD_PARA1 对话框上添加静态文本控件内容为参数一 再在后面插入一个文本框控件 用 ClassWizard 将其关联为一个 int 型变量名为 m_nPara1在 IDD_PARA2 对话框上添加静态文本控件内容为参数二 再在后面插入一个文本框控件用 ClassWizard 将其关联为一个 int 型变量名为 m_nPara2在 IDD_RESULT 对话框上添加静态文本控件内容为结果 再在后面插入一个文本框控件用 ClassWizard 将其关联为一个 int 型变量名为 m_nResult7. 为 CPara1 类添加成员函数 int GetParaValue 代码如下:int CPara1::GetParaValue return m_nPara1为 CPara2 类添加成员函数 int GetParaValue 代码如下:int CPara2::GetParaValue return m_nPara2为 CResult 类添加成员函数 void SetResultValueint nResult 代码如下:void CResult::SetResultValueint nResult m_nResult nResult8. 在 IDD_MYTAB_DIALOG 对话框的初始化函数 OnInitDialog 里面添加如下代码://关联对话框并且将 IDC_TABTEST 控件设为父窗口m_para1.CreateIDD_PARA1GetDlgItemIDC_TABTESTm_para2.CreateIDD_PARA2GetDlgItemIDC_TABTESTm_result.CreateIDD_RESULTGetDlgItemIDC_TABTEST//获得 IDC_TABTEST 客户区大小CRect rsm_tab.GetClientRectrs//调整子对话框在父窗口中的位置rs.top1rs.bottom-60rs.left1rs.right-2//设置子对话框尺寸并移动到指定位置m_para1.MoveWindowrsm_para2.MoveWindowrsm_result.MoveWindowrs//分别设置隐藏和显示m_para1.ShowWindowtruem_para2.ShowWindowfalsem_result.ShowWindowfalse//设置默认的选项卡m_tab.SetCurSel09. 添加 Tab Control 控件的 TCN_SELCHANGE 事件响应函数 OnSelchangeTabtestNMHDRpNMHDR LRESULT pResult 函数体代码如下:int CurSel m_tab.GetCurSel switchCurSel case 0: m_para1.ShowWindowtrue m_para2.ShowWindowfalse m_result.ShowWindowfalse break case 1: m_para1.ShowWindowfalse m_para2.ShowWindowtrue m_result.ShowWindowfalse break case 2: m_para1.ShowWindowfalse m_para2.ShowWindowfalse m_result.ShowWindowtrue break default: =================================VC中 Tab 键控制问题的解决办法做作 vc 界面的都知道,如果在遇到多个控件用 tab 分组显示时是一件很繁琐的事情,同时代码量也特别的大下面是我今天下午刚刚想出的一个自己认为满意的解决办法。
主要思路如下: 做一个类 CTabContainer在初始化的时候确定将控件 id 分成几组也就是几个 tab 标签,然后为每一组做一个链表分别保存每一个 tab 下属的控件 id 集。
这样的话,只需在对话框初始化时做好一个基本的设定,然后在 OnSelchangeTab1 写上m_pTabContainer-Showm_tab.GetCurSel就可以了。
类的使用方法: 在 OnInitDialog里面pResult 0 m_pTabContainer-Init3this//3 个 tab 标签按钮,this 对话框指针。
m_pTabContainer-AddCtrlId0IDC_BUTTON1//IDC_BUTTON1 加到第一组 tab 当中 m_pTabContainer-AddCtrlId0IDC_BUTTON4//下面类似 m_pTabContainer-AddCtrlId0IDC_BUTTON5 m_pTabContainer-AddCtrlId1IDC_BUTTON2 m_pTabContainer-AddCtrlId1IDC_BUTTON6 m_pTabContainer-AddCtrlId2IDC_BUTTON3 m_pTabContainer-AddCtrlId2IDC_BUTTON7 m_pTabContainer-AddCtrlId2IDC_BUTTON8 m_pTabContainer-Show0//默认显示第一个标签下面的控件 在控件 TAb 的事件 OnSelchangeTab1 m_pTabContainer-Showm_tab.GetCurSel即可 另附类 CTabContainer 的源代码: classCTabContainer public: CTabContainer virtualCTabContainer CTabContainerconstCTabContainertabContainer constCTabContaineroperatorconstCTabContainertabContainer BOOLInitintnTabsCWndpParent file://初始化 tabnTabs 代表有几个按扭 BOOLAddCtrlIdintnTabintnID//将 id 添加到哪个 tab 中 BOOLDeleteintnTabintnID//删除 id voidShowintnTab//当前显示哪个 tab voidClearvoid//释放内存和清理工作 protected: typedefCListCIntList CIntListm_pIDGroups//指向链表的指针 intm_nLCount//链表的个数 CWndm_pParent//父窗体指针 10. 在 IDD_MYTAB_DIALOG 对话框下面添加一个按钮 标题为计算 为其添加事件响应函数 代码如下:m_para1.UpdateDatatrue m_para2.UpdateDatatrue m_result.SetResultValuem_para1.GetParaValuem_para2.GetParaValue m_result.UpdateDatafalse11.这个小程序很简单但是他说明了 Tab Control 控件的基本用法.本文来自 CSDN 博客,转载请标明出处:http://blog.csdn.net/j260749883/archive/2010/06/25/5694041.aspx