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
上一篇:
进程模块枚举方法附源码
下一篇:
餐饮管理系统