vc tab控件的使用_第1页
vc tab控件的使用_第2页
vc tab控件的使用_第3页
vc tab控件的使用_第4页
vc tab控件的使用_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vc6.0 tab控件的使用 MFC中使用TAB Control控件(转)     假如我现在有个SDI程序,View是Form View,想在上面放个Tab Control,包含两个Page。现在让我们来看看应该怎样处理。首先当然要增加一个Tab Control资源,然后利用Class Wizard,在View中增加一个Control变量。接着建立两个对话框资源,别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。接着利用Class Wizard,分别为这两个对话框建立两个类,比如CPage1和CPage2。然后在View类

2、头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。为了避免用户在切换Tab时,程序对Tab Index的枚举,可以利用数组来做这个事情。在View的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面,等等。void CTab_testView:OnInitialUpdate()    CFormView:OnInitialUpdate();    GetParentFrame()->RecalcLayout()

3、;    ResizeParentToFit();          /为Tab Control增加两个页面     m_tab.InsertItem(0, _T("First");     m_tab.InsertItem(1, _T("Second");         /创建两个对话框

4、0;    m_page1.Create(IDD_DIALOG1, &m_tab);     m_page2.Create(IDD_DIALOG2, &m_tab);     /设定在Tab内显示的范围     CRect rc;     m_tab.GetClientRect(rc);     rc.top += 20;  

5、60;  rc.bottom -= 8;     rc.left += 8;     rc.right -= 8;     m_page1.MoveWindow(&rc);     m_page2.MoveWindow(&rc);     /把对话框对象指针保存起来     pDialog0 = &m_page1; 

6、;    pDialog1 = &m_page2;     /显示初始页面     pDialog0->ShowWindow(SW_SHOW);     pDialog1->ShowWindow(SW_HIDE);     /保存当前选择     m_CurSelTab = 0;这里面需要注意的是,我用了一个CDialog指针数组来进行保存,数组的

7、大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。用户切换时,需要响应相关的消息。void CTab_testView:OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here         pDialogm_CurSelTab->ShowWindow(SW_HIDE);     m_Cu

8、rSelTab = m_tab.GetCurSel();     pDialogm_CurSelTab->ShowWindow(SW_SHOW);*pResult = 0;首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。这比一个个去枚举简单多了。还有一点比较有意思,那就是DDX/DDV机制的运用。要想获得Tab Control各个页面的数据,可以利用DDX/DDV机制,但需要注意,因为这是多个页面,所以需要显式调用多次。void CTab_testView:OnButton1() / TODO: Add your

9、 control notification handler code here     m_page1.UpdateData();     m_page2.UpdateData();     CString str1 = m_page1.m_str1;     CString str2 = m_page2.m_str2;     AfxMessageBox(str1);  &#

10、160;  AfxMessageBox(str2);经过这几步处理,基本上我们就可以利用Tab Control的强大功能了。VC之TAB 控件实例对于用惯了VB和VC#的我来说,VC控件真是太麻烦了,不过有什么办法呢?许多企业还在使用,所以继续学习,咸淡算扯到这了,这里做了个最为简单的Tab Control 的使用范例。 1. 在主面板上拖放一Tab Control控件,我们这里建立其在主面板类(CTabSampleDlg)里面的成员变量m_tab。2.添加两个子对话框,将其属性设置为“child,none”。这里要注意了,添加的必须是继承自DIALOG类的对话框,而不是PropPa

11、ge对话框,否则的话,子面板将不能响应用户操作。然后生成两个新类“CTabPage1, CTabPage2”。3.为CTabSampleDlg类 添加两个成员变量,他们分别是CTabPage1和CTabPage2类的实例。4.在CTabSampleDlg类的OnInitDialog成员函数内的适当位置添加如下代码。BOOL CTabSampleDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system

12、 command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)   CString strAboutMenu;   strAboutMenu.LoadString(IDS_ABOUTBOX);   if (!strAboutMenu.IsEmpty()   

13、0;   pSysMenu->AppendMenu(MF_SEPARATOR);    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);   / Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);

14、0;   / Set big iconSetIcon(m_hIcon, FALSE);   / Set small icon/=/初始化TABTCITEM tc1,tc2;tc1.mask = TCIF_TEXT;tc1.pszText = "第一页"tc2.mask = TCIF_TEXT;tc2.pszText = "第二页"m_tab.InsertItem(0, &tc1);m_tab.InsertItem(1, &tc2); /到这里只是添加了两个tab页CRect rec;m_tab.Ge

15、tClientRect(&rec);/获得TAB控件的坐标/定位选项卡页的位置,这里可以根据情况自己调节偏移量rec.bottom -= 1;rec.left += 1;rec.top += 20;rec.right -= 2;/创建子页面m_page1.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB);m_page2.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB);/将子页面移动到指定的位置m_page1.MoveWindow(&rec);m_page2.MoveWindow(&rec);/显示子页面m_p

16、age1.ShowWindow(SW_SHOW);m_page2.ShowWindow(SW_HIDE);/=return TRUE; / return TRUE unless you set the focus to a control5. 为主面板上的TabControl 控件添加 OnSelchangeTab 事件, 添加代码如下。void CTabSampleDlg:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here &#

17、160;  switch (m_tab.GetCurSel()          case 0:            m_page1.ShowWindow(SW_SHOW);            m_page2.ShowWindow(SW_HIDE);   

18、;         break;       case 1:            m_page1.ShowWindow(SW_HIDE);            m_page2.ShowWindow(SW_SHOW); 

19、0;          break;      default:            break;    *pResult = 0;Tab Control控件的应用前几天在网上搜了点资料,是关于Tab Control控件的应用,当时还做了一遍,今天再做有点生疏了,总是忘了点什么。于是总结在这儿,一是为以后使用提供方便

20、,再是供大家参考。首先,新建一个基于对话框的MFC应用程序,添加Tab Control控件,并为其添加变量CTabCtrl m_tab;然后,新建两个对话框,均设置属性如下(这步很重要):Style-Child,Border-None;然后分别添加一个文本框。分别为这两个对话框建立新类CPage1和CPage2。该程序用了一个CDialog的指针数组来进行保存各个页面,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。 声明变量:CDialog *pDialog2,并且添加一个int型变量用于保存当前活动的页面索引,int m_CurSelTab;

21、接着,在OnInitDialog函数中添加如下代码:    /为Tab Control增加两个页面    m_tab.InsertItem(0, _T("First");    m_tab.InsertItem(1, _T("Second");    /创建两个对话框    m_page1.Create(IDD_DIALOG1, &m_tab);    m_page2.

22、Create(IDD_DIALOG2, &m_tab);    /设定在Tab内显示的范围    CRect rc;    m_tab.GetClientRect(rc);    rc.top += 20;    rc.bottom -= 8;    rc.left += 8;    rc.right -= 8;    m_page1.MoveWin

23、dow(&rc);    m_page2.MoveWindow(&rc);    /用数组把对话框对象指针保存起来    pDialog0 = &m_page1;    pDialog1 = &m_page2;    /显示初始页面    pDialog0->ShowWindow(SW_SHOW);    pDialog1->ShowWindo

24、w(SW_HIDE);    /保存当前选择    m_CurSelTab = 0;这样就可进行正常的显示了,如果响应页面切换这个事件,可以为Tab Control控件添加消息响应函数:OnSelchangeTab,并在该函数中添加如下代码:   /得到页面的数据    CString str;    if(m_CurSelTab=0)           

25、 m_page1.UpdateData(TRUE);         m_page1.GetDlgItem(IDC_EDIT_PAGE1)->GetWindowText(str);         if(m_CurSelTab=1)            m_page2.UpdateData(TRUE);   &

26、#160;    m_page2.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);         MessageBox(str);    /首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。这比一个个去枚举简单多了。    pDialogm_CurSelTab->ShowWindow(SW_HIDE);    m_

27、CurSelTab = m_tab.GetCurSel();    pDialogm_CurSelTab->ShowWindow(SW_SHOW);经过这几步处理,一个简单的Tab Contrl控件应用程序就完成了。VC+ Tab Control控件的使用1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish.2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边

28、Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.3. 在对话框的初始化函数OnInitDialog里面添加如下代码:m_tab.InsertItem(0,"参数一");  /添加参数一选项卡m_tab.InsertItem(1,"参数二");  /添加参数二选项卡m_tab.InsertItem(2,"结果");    /添加结果选项卡 4.在对话框资源里面添加三个对话框资源, ID分别命名为ID

29、D_PARA1, IDD_PARA2, IDD_RESULT. 字体为宋体, 字号为9, style为Child, Border为None, 宽度调整为161. 再分别为其添加对应的基于CDialog类CPara1, CPara2, CResult. 5. 在CMyTabDlg类中添加三个成员变量m_para1, m_para2, m_result, 分别是三个子对话框的实例. 代码如下: CResult m_result;CPara2 m_para2;CPara1 m_para1;6. 在IDD_PARA1对话框上添加静态文本控件内容为"参数一" 再在后面插入一

30、个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara1;在IDD_PARA2对话框上添加静态文本控件内容为"参数二" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara2;在IDD_RESULT对话框上添加静态文本控件内容为"结果" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nResult;7. 为CPara1类添加成员函数int GetParaValue() 代码如下:int CPara1:GetParaValue()&#

31、160;   return m_nPara1;为CPara2类添加成员函数int GetParaValue() 代码如下:int CPara2:GetParaValue()    return m_nPara2;为CResult类添加成员函数void SetResultValue(int nResult) 代码如下:void CResult:SetResultValue(int nResult)     m_nResult = nResult;8. 在IDD_MYTAB_DIALOG对话框的初始化函数On

32、InitDialog里面添加如下代码: /关联对话框,并且将IDC_TABTEST控件设为父窗口m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST);m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST);m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST);    /获得IDC_TABTEST客户区大小CRect rs;m_tab.GetClientRect(&rs);/调整子对话框在父窗口中的位置rs.top+

33、=1; rs.bottom-=60; rs.left+=1; rs.right-=2;     /设置子对话框尺寸并移动到指定位置m_para1.MoveWindow(&rs);m_para2.MoveWindow(&rs);m_result.MoveWindow(&rs);/分别设置隐藏和显示m_para1.ShowWindow(true);m_para2.ShowWindow(false);m_result.ShowWindow(false);    /设置默认的选项卡m_tab.SetCurSel(0);

34、 9. 添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下: int CurSel = m_tab.GetCurSel();    switch(CurSel)        case 0:         m_para1.ShowWindow(true);  

35、;       m_para2.ShowWindow(false);         m_result.ShowWindow(false);        break;    case 1:         m_para1.ShowWindow(false); 

36、0;       m_para2.ShowWindow(true);         m_result.ShowWindow(false);        break;    case 2:         m_para1.ShowWindow(false); 

37、0;       m_para2.ShowWindow(false);         m_result.ShowWindow(true);        break;    default:         ;      

38、60;  VC+中Tab键控制问题的解决办法做作vc界面的都知道,如果在遇到多个控件用tab分组显示时是一件很繁琐的事情,同时代码量也特别的大下面是我今天下午刚刚想出的一个自己认为满意的解决办法。主要思路如下:做一个类CTabContainer,在初始化的时候确定将控件id分成几组(也就是几个tab标签),然后为每一组做一个链表分别保存每一个tab下属的控件id集。这样的话,只需在对话框初始化时做好一个基本的设定,然后在OnSelchangeTab1写上m_pTabContainer->Show(m_tab.GetCurSel();就可以了。类的使用方法:在OnInitDialog()里面*pResult = 0; m_pTabContainer->Init(3,this);/3个tab标签按钮,this对话框指针。m_pTabContainer->AddCtrlId(0,IDC_BUTTON1);/IDC_BUTTON1加到第一组tab当中m_pTabContainer->AddCtrlId(0,IDC_BUTTON4);/下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论