MFC TabCtrl空间

MFC可以使用TabCtrl空间实现类似于选项卡功能的实现。

实现方法大概有这几步组成:

1、工程与主对话框创建  

  新建一个基于对话框的MFC应用程序,添加一个TabCtrl控件,并绑定CTabCtrl控件类型的变量(在VC 6.0中通过类向导来添加,Ctrl+W快捷键可直接调出),变量名定为m_tabCtrl(可以自由指定)。

2、tab标签对话框创建

  每个tab标签都可以显示一个对话框,因此我们需要先设计对话框,这个和主对话框的设计类似的,只是在属性设置中需要指定Style=Child,Border=None。至于对话框资源的添加,在ResourceView中的Dialog上右击,选择“Insert Dialog”即可,按照同样方法添加三个Dialog,可以用默认的名字,也可以自己重新起名字。

  接下来就是为这三个对话框资源添加对话框类,添加也很简单,在对话框资源上双击即可,去默认的名字就行。好了,现在我们有了三个新的对话框资源以及三个对话框类,列举IDD和类名如下(这些是默认的值,如果你在上面步骤中自己重命名了,那以重命名的为准,这些信息下面会用到):

class      IDD
CDialog1   IDD_DIALOG1
CDialog2   IDD_DIALOG2
CDialog3   IDD_DIALOG3  

3、在主对话框中添加tab标签对话框对象

  tab标签对话框可以算作是主对话框的一部分,因此我们在主对话框中分别增加三个tab对话框类型的变量,如下(变量名可根据个人喜号自由指定):

CDialog1 m_Dlg1;
CDialog2 m_Dlg2;
CDialog3 m_Dlg3;

记得要包含相应的tab对话框的头文件。

4、初始化

  这一步的工作就是将各个tab对话框与TabCtrl控件的每一个标签项对于起来,这些工作在主对话框的OnInitDialog()中完成,具体的代码如下:

m_tabCtrl.InsertItem(0,_T(“活期储蓄”));
m_tabCtrl.InsertItem(1,_T(“整存整取”));
m_tabCtrl.InsertItem(2,_T(“通知存款”));

m_Dlg1.Create(IDD_DIALOG1,&m_tabCtrl);
m_Dlg2.Create(IDD_DIALOG2,&m_tabCtrl);
m_Dlg3.Create(IDD_DIALOG3,&m_tabCtrl);

CRect rc;
m_tabCtrl.GetClientRect(&rc);
rc.top += 20;
rc.bottom -= 4;
rc.left += 4;
rc.right -= 4;

m_Dlg1.MoveWindow(&rc);
m_Dlg2.MoveWindow(&rc);
m_Dlg3.MoveWindow(&rc);

m_Dlg1.ShowWindow(SW_SHOW);

m_tabCtrl.SetCurFocus(0);

  通过InsertItem添加三个标签项,接下来创建三个tab对话框并与TabCtrl绑定,后面rc和MoveWindow的操作时调整对话框的位置的操作,否则你会发现程序运行后看不到选项卡了(原因是默认的tab对话框的大小为主对话框显示区域的大小,因此把tab标签覆盖掉了,所以要先获取主对话框的大小,然后做下调整)。最后两行代码是设置显示第一个标签项。

5、标签(或选项卡)切换

  在主对话框中处理TabCtrl控件的TCN_SELCHANGE消息即可,添加消息处理函数的地方还是通过类向导来完成。这个函数中的主要操作就是设置各个选项卡谁显示、谁不显示而已,代码页比较简单,只是如果标签太大的话,代码可能会比较多,本示例中的代码如下:

void CTabCtrlTestDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
CRect rc;
m_tabCtrl.GetClientRect(&rc);

switch(m_tabCtrl.GetCurSel())
{
case 0:
m_Dlg1.ShowWindow(SW_SHOW);
m_Dlg2.ShowWindow(SW_HIDE);
m_Dlg3.ShowWindow(SW_HIDE);
m_Dlg1.SetFocus();
break;
case 1:
m_Dlg2.ShowWindow(SW_SHOW);
m_Dlg1.ShowWindow(SW_HIDE);
m_Dlg3.ShowWindow(SW_HIDE);
m_Dlg2.SetFocus();
break;
case 2:
m_Dlg3.ShowWindow(SW_SHOW);
m_Dlg2.ShowWindow(SW_HIDE);
m_Dlg1.ShowWindow(SW_HIDE);
m_Dlg3.SetFocus();
break;
default:
break;
}

*pResult = 0;
}

至此,我们的选项卡式对话框就出来了!

http://www.letuknowit.com/archives/51/ 点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值