MFC入门学习之控件(3)标签控件Tab Control的添加和使用

向对话框中拖入一个tab control控件,调整好大小以适合要求


对于控件类,我们需要定义一个控件类的对象,通过对象的成员方法来将需要添加的内容显示在对话框中,并通过一定的逻辑来控制标签项的显示顺序。

创建一个新的dialog,并且在属性中进行如下设置:


在头文件中添加

CTabCtrlm_Tab;

CVMC_Packagem_Package;

CVMC_NandAccessm_NandAccess;

进入要添加控件的对话框

首先需要在如下函数中添加linked代码,否则运行时报错。

 

voidCVmc_Dld::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

 

//linked

DDX_Control(pDX, IDC_TAB_DLD, m_tab);

}

添加如下代码完成标签的显示,

CRect tabRect;//size and position of tabCtrl in client area

 

m_Tab.InsertItem(0, _T("Package"));//Inser PackageDialog into Item

m_Tab.InsertItem(1, _T("NAND"));//Insert NANDDialog into Item

 

//link dialog to tab control

m_Package.Create(IDD_DIALOG_PACKAGE, &m_Tab);

m_NandAccess.Create(IDD_DIALOG_NAND, &m_Tab);

 

m_Tab.GetClientRect(&tabRect);//get client rect

 

//modify tabRect, adapt to main dialog

tabRect.left += 1;

tabRect.right -= 1;

tabRect.bottom -= 1;

tabRect.top += 20;

 

//set Packge display default

m_Package.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);

m_NandAccess.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

这样我们只是设置了再默认情况下的标签显示,但是当真正在程序运行时,便签内的内容并不能够正常显示,因此需要对事件的处理事件编程。


在此处选择当选择项发生改变时的消息处理,


当然也可以手动的编写代码完成,需要编辑

BEGIN_MESSAGE_MAP(CVMC_MainDialog,CDialogEx)

ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_ALLDIALOG,&CVMC_MainDialog::OnTcnSelchangeTabAlldialog)

END_MESSAGE_MAP()

并添加

voidCVMC_MainDialog::OnTcnSelchangeTabAlldialog(NMHDR *pNMHDR, LRESULT *pResult)

{

// TODO: Add your control notification handler code here

*pResult = 0;

 

}

函数的声明,现在我们就需要编辑上面的方法完成我们需要的动作。具体代码的编写如下:

 

//getcurrent selected tab and change it to show

switch(m_Tab.GetCurSel())

{

//change the show window as you want

case0:

//set Package show

m_Package.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);

//set others hide

m_NandAccess.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

m_SpiNorFlash.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

break;

case1:

//set NAND Flash show

m_NandAccess.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);

//set others hide

m_Package.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

m_SpiNorFlash.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

break;

case2:

//set SPI-NOR Flash show

m_SpiNorFlash.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);

//set others hide

m_Package.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

m_NandAccess.SetWindowPos(NULL, tabRect.left, tabRect.top,tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

break;

default:

break;

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值