为了更方便地使用VC++中的CTabCtrl控件,特在YTabCtrl.h文件中定义了几个宏,具体包括:
- YTABCTRL_DECLEAR:成员声明,该宏在包含CTabCtrl控件的对话框的类定义中使用。需传入一个数字,表示TAB控件最大能容纳的页面数
- YTABCTRL_INIT:CTabCtrl关联初始化,首先应调用该函数实现自己的CTabCtrl控件与本代码的关联。需传入CTabc控件的ID
- YTABCTRL_INIT_FROM_VAR:和YTABCTRL_INIT的功能一样,只是传入的是CTabCtrl控件的变量指针
- YTABCTRL_ADD_PAGE:项TAB控件中添加页面。传入的参数包括页面在TAB控件中的顺序号,页面的类名,页面在TAB控件中显示的标题文字。在某些VS版本中如果没有定义AFX_DESIGN_TIME宏,则还需要传入一个参数,即页面对话框的ID
- YTABCTRL_FINISH:完成页面与TAB控件之间的功能
- YTABCTRL_UPDATE:单击CTabCtrl时更新页面。该宏需在CTabCtrl的单击事件中调用,单击消息响应由自己添加
- YTABCTRL_IS_PAGE:运行时类型识别。判断当前页面是否是给定的对话框类的实例,需传入要判断的类名
- YTABCTRL_CURRENT_PAGE:获取当前页面的对话框指针,返回对象为页面对话框的基类CDialog指针,可以转换为页面对话框类对象
一个简单的例子如下:
使用步骤如下,简称CTabCtrl所在对话框类为父类(具体请下载例子查看):
1.父类的定义中调用:
YTABCTRL_DECLEAR(10);
2.在父类的OnInitDialog函数中调用:
YTABCTRL_INIT(IDC_TAB1);
YTABCTRL_ADD_PAGE(1, CPageOneDlg, IDD_DLG_PAGE_ONE, _T("页面1"));
YTABCTRL_ADD_PAGE(8, CPageTwoDlg, IDD_DLG_PAGE_TWO, _T("页面2"));
YTABCTRL_ADD_PAGE(3, CPageThreeDlg, IDD_DLG_PAGE_THREE, _T("页面3"));
YTABCTRL_ADD_PAGE(4, CPageFourDlg, IDD_DLG_PAGE_FOUR, _T("页面4"));
YTABCTRL_FINISH();
3.在CTabCtrl控件的单击事件TCN_SELCHANGE中调用:
YTABCTRL_UPDATE();
4.如果有需要,可在父类中判当前页面是哪个页面,然后调用页面类的函数:
if( YTABCTRL_IS_PAGE(CPageTwoDlg) ) {
CPageTwoDlg *pDlg = (CPageTwoDlg*)YTABCTRL_CURRENT_PAGE();
AfxMessageBox(pDlg->Test());
}
在使用YTABCTRL_ADD_PAGE时,对于传入的页面顺序号,决定了页面在TAB控件中排列的顺序,具体是按照传入序号从小到大进行排列的。序号从1开始,不得超过YTABCTRL_DECLEAR中传入的数字大小。序号之间中间允许留空,宏定义中会自动排序无效的页面。