最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

在MFC中使用Tab Control

来源:动视网 责编:小OO 时间:2025-10-06 22:42:49
文档

在MFC中使用Tab Control

在MFC中使用TabControl.txt大悲无泪,大悟无言,大笑无声。我们手里的金钱是保持自由的一种工具。女人在约会前,一定先去美容院;男人约会前,一定先去银行。说实话,我刚开始看见TabControl的时候,觉得很简单。哪知道用了一下,才发现自己错了。要用好它,还是需要一些技巧的。经过网上搜索资料,以及我自己的摸索,把一些要点记录在这里。TabControl的运行效果有点像PropertySheet,但两者还是有一些区别。我的理解就是PropertySheet主要用在对话框中,对数据进行进
推荐度:
导读在MFC中使用TabControl.txt大悲无泪,大悟无言,大笑无声。我们手里的金钱是保持自由的一种工具。女人在约会前,一定先去美容院;男人约会前,一定先去银行。说实话,我刚开始看见TabControl的时候,觉得很简单。哪知道用了一下,才发现自己错了。要用好它,还是需要一些技巧的。经过网上搜索资料,以及我自己的摸索,把一些要点记录在这里。TabControl的运行效果有点像PropertySheet,但两者还是有一些区别。我的理解就是PropertySheet主要用在对话框中,对数据进行进
在MFC中使用Tab Control.txt大悲无泪,大悟无言,大笑无声。我们手里的金钱是保持自由的一种工具。女人在约会前,一定先去美容院;男人约会前,一定先去银行。说实话,我刚开始看见Tab Control的时候,觉得很简单。哪知道用了一下,才发现自己错了。

要用好它,还是需要一些技巧的。经过网上搜索资料,以及我自己的摸索,把一些要点记录在这里。

Tab Control的运行效果有点像Property Sheet,但两者还是有一些区别。我的理解就是Property Sheet主要用在对话框中,对数据进行进行分类管理。而Tab Control使用范围更广一些,既可以用在对话框,也可以用在视图中,除了可以管理配置数据外,还可以对软件的组织进行规划,比如可以通过它来切换不同的视图等等。

当然这不是没有代价的,Tab Control的编程就比Property Sheet的复杂很多。

我最初有点搞不懂,如何在Tab Control中使用不同的Page,就象Property Page一样,Tab Control并没有提供便利的机制让你轻松做到这一点。还好,VC是最棒的,撒花~通过变通的方法还是可以做到这一点。

不罗嗦了,上代码。

假如我现在有个SDI程序,View是Form View,想在上面放个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.InsertItem(0, _T("First"));

m_tab.InsertItem(1, _T("Second"));

//创建两个对话框

m_page1.Create(IDD_DIALOG1, &m_tab);

m_page2.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.MoveWindow(&rc);

m_page2.MoveWindow(&rc);

//把对话框对象指针保存起来

pDialog[0] = &m_page1;

pDialog[1] = &m_page2;

//显示初始页面

pDialog[0]->ShowWindow(SW_SHOW);

pDialog[1]->ShowWindow(SW_HIDE);

//

保存当前选择

m_CurSelTab = 0;

}

这里面需要注意的是,我用了一个CDialog指针数组来进行保存,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。

用户切换时,需要响应相关的消息。

void CTab_testView::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here

pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);

m_CurSelTab = m_tab.GetCurSel();

pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);

*pResult = 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;

AfxMessageBox(str1);

AfxMessageBox(str2);

}

经过这几步处理,基本上我们就可以利用Tab Control的强大功能了。

文档

在MFC中使用Tab Control

在MFC中使用TabControl.txt大悲无泪,大悟无言,大笑无声。我们手里的金钱是保持自由的一种工具。女人在约会前,一定先去美容院;男人约会前,一定先去银行。说实话,我刚开始看见TabControl的时候,觉得很简单。哪知道用了一下,才发现自己错了。要用好它,还是需要一些技巧的。经过网上搜索资料,以及我自己的摸索,把一些要点记录在这里。TabControl的运行效果有点像PropertySheet,但两者还是有一些区别。我的理解就是PropertySheet主要用在对话框中,对数据进行进
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top