CTabControl使用(系统配置程序部分功能)

本文介绍如何使用 MFC 中的 CTabCtrl 类实现多页面对话框的切换,包括初始化标签控件、添加标签页、设置默认选项以及通过控件消息函数响应标签变化来显示和隐藏不同的对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cpp] view plain copy
print ?
  1. 标签控件相当于一个页面容器,可以容纳多个对话框;  
  2. CTabCtrl类主要成员函数  
  3. Int GetCueSel()const ; 获取标签控件中当前选择标签索引  
  4. BOOL GetItem(int nItem,TCITEM* pTabCtrItem)const//获取标签某个标签的信息  
  5. BOOL SetItem(int nItem,TCITEM* pTabCteltem) const;//设置某标签的所有或部分属性  
  6.   
  7. 每个对话框的边框风格改为无边框,child子窗口  
标签控件相当于一个页面容器,可以容纳多个对话框;
CTabCtrl类主要成员函数
Int GetCueSel()const ; 获取标签控件中当前选择标签索引
BOOL GetItem(int nItem,TCITEM* pTabCtrItem)const; //获取标签某个标签的信息
BOOL SetItem(int nItem,TCITEM* pTabCteltem) const;//设置某标签的所有或部分属性

每个对话框的边框风格改为无边框,child子窗口
  1. 类成员变量及函数  
  2. // CCTabControlDlg 对话框,初始化  
  3. class CCTabControlDlg : public CDialogEx  
  4. {  
  5. ……  
  6. public:  
  7.     CTabCtrl m_CTabCtrl;  
  8.     CNomalDlg m_CNomalDlg;  //常规对话框  
  9.     CBeginDlg m_CBeginDlg;   //启动对话框  
  10.     afx_msg void OnTcnSelchangeTabSystemconfig(NMHDR *pNMHDR, LRESULT *pResult);            //控件响应函数  
  11. };  
类成员变量及函数
// CCTabControlDlg 对话框,初始化
class CCTabControlDlg : public CDialogEx
{
……
public:
	CTabCtrl m_CTabCtrl;
	CNomalDlg m_CNomalDlg;  //常规对话框
	CBeginDlg m_CBeginDlg;   //启动对话框
	afx_msg void OnTcnSelchangeTabSystemconfig(NMHDR *pNMHDR, LRESULT *pResult);            //控件响应函数
};

  1. BOOL CCTabControlDlg::OnInitDialog()  
  2. {  
  3.     CDialogEx::OnInitDialog()  
  4. ………..  
  5.   
  6.     // TODO:  在此添加额外的初始化代码  
  7.     //初始化标签控件  
  8.     TC_ITEM tcItem; //标签控件  
  9.   
  10.     tcItem.mask = TCIF_TEXT;  
  11.     tcItem.pszText = L"常规";  
  12.   
  13.     //添加标签页  
  14.     m_CTabCtrl.InsertItem(0, &tcItem);   
  15.   
  16.     tcItem.pszText = L"引导";  
  17.     m_CTabCtrl.InsertItem(1, &tcItem);  
  18.   
  19.     tcItem.pszText = L"服务";  
  20.     m_CTabCtrl.InsertItem(2, &tcItem);  
  21.   
  22.     tcItem.pszText = L"启动";  
  23.     m_CTabCtrl.InsertItem(3, &tcItem);  
  24.   
  25.     tcItem.pszText = L"工具";  
  26.     m_CTabCtrl.InsertItem(4, &tcItem);  
  27.       
  28.     //设置默认选择项  
  29.     m_CTabCtrl.SetCurSel(3);  
  30.   
  31.     //初始化  
  32.     CRect  tabRect;  
  33.     m_CBeginDlg.Create(IDD_DIALOG_BEGIN, &m_CTabCtrl);  
  34.     m_CNomalDlg.Create(IDD_DIALOG_NOMAL, &m_CTabCtrl);  
  35.   
  36.     m_CTabCtrl.GetClientRect(&tabRect);  
  37.   
  38.   
  39.     //调整tableRect大小,适合放置标签  
  40.     tabRect.left += 1;  
  41.     tabRect.right -= 1;  
  42.     tabRect.top += 25;  
  43.     tabRect.bottom -= 1;  
  44.   
  45.     //根据调整好的tabRect放到子对话框中  
  46.     m_CBeginDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(),tabRect.Height(),SWP_SHOWWINDOW);  
  47.     m_CNomalDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);//隐藏窗口  
  48.   
  49.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
  50. }  
BOOL CCTabControlDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog()
………..

	// TODO:  在此添加额外的初始化代码
	//初始化标签控件
	TC_ITEM tcItem; //标签控件

	tcItem.mask = TCIF_TEXT;
	tcItem.pszText = L"常规";

	//添加标签页
	m_CTabCtrl.InsertItem(0, &tcItem); 

	tcItem.pszText = L"引导";
	m_CTabCtrl.InsertItem(1, &tcItem);

	tcItem.pszText = L"服务";
	m_CTabCtrl.InsertItem(2, &tcItem);

	tcItem.pszText = L"启动";
	m_CTabCtrl.InsertItem(3, &tcItem);

	tcItem.pszText = L"工具";
	m_CTabCtrl.InsertItem(4, &tcItem);
	
	//设置默认选择项
	m_CTabCtrl.SetCurSel(3);

	//初始化
	CRect  tabRect;
	m_CBeginDlg.Create(IDD_DIALOG_BEGIN, &m_CTabCtrl);
	m_CNomalDlg.Create(IDD_DIALOG_NOMAL, &m_CTabCtrl);

	m_CTabCtrl.GetClientRect(&tabRect);


	//调整tableRect大小,适合放置标签
	tabRect.left += 1;
	tabRect.right -= 1;
	tabRect.top += 25;
	tabRect.bottom -= 1;

	//根据调整好的tabRect放到子对话框中
	m_CBeginDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(),tabRect.Height(),SWP_SHOWWINDOW);
	m_CNomalDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);//隐藏窗口

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

  1. CTabControl控件消息函数  
  2. void CCTabControlDlg::OnTcnSelchangeTabSystemconfig(NMHDR *pNMHDR, LRESULT *pResult)  
  3. {  
  4.     // TODO:  在此添加控件通知处理程序代码  
  5.     int nSelectCur = 0;  
  6.   
  7.   
  8.     CRect tabRect;  
  9.     m_CTabCtrl.GetClientRect(&tabRect);  
  10.     //调整tableRect大小,适合放置标签  
  11.     tabRect.left += 1;  
  12.     tabRect.right -= 1;  
  13.     tabRect.top += 25;  
  14.     tabRect.bottom -= 1;  
  15.   
  16.     nSelectCur = m_CTabCtrl.GetCurSel();  
  17.   
  18.     switch (nSelectCur)  
  19.     {  
  20.         case 0:    
  21.         {  
  22.           m_CBeginDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW );  
  23.           m_CNomalDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);  
  24.         }  
  25.         break;  
  26.       case 1:  break;  
  27.       case 2:  break;  
  28.       case 3:  
  29.       {  
  30.           m_CBeginDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);  
  31.           m_CNomalDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  
  32.       }   
  33.       break;  
  34.       case 4:  break;  
  35.   
  36.     }  
  37.   
  38.     *pResult = 0;  
  39. }  
  40.   
  41.   
  42.   
  43. 启动对话框中添加静态控件用来打开任务管理器  
  44. void CBeginDlg::OnStnClickedStaticOptask()  
  45. {  
  46.     // TODO:  在此添加控件通知处理程序代码  
  47.     ShellExecute(this->m_hWnd, L"open", L"taskmgr.exe", L"", L"",SW_SHOW);  
  48. }  
  49.    
CTabControl控件消息函数
void CCTabControlDlg::OnTcnSelchangeTabSystemconfig(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO:  在此添加控件通知处理程序代码
	int nSelectCur = 0;


	CRect tabRect;
	m_CTabCtrl.GetClientRect(&tabRect);
	//调整tableRect大小,适合放置标签
	tabRect.left += 1;
	tabRect.right -= 1;
	tabRect.top += 25;
	tabRect.bottom -= 1;

	nSelectCur = m_CTabCtrl.GetCurSel();

	switch (nSelectCur)
	{
	    case 0:  
	    {
		  m_CBeginDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW );
		  m_CNomalDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
	    }
	    break;
	  case 1:  break;
	  case 2:  break;
	  case 3:
	  {
		  m_CBeginDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
		  m_CNomalDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
	  } 
	  break;
	  case 4:  break;

	}

	*pResult = 0;
}



启动对话框中添加静态控件用来打开任务管理器
void CBeginDlg::OnStnClickedStaticOptask()
{
	// TODO:  在此添加控件通知处理程序代码
	ShellExecute(this->m_hWnd, L"open", L"taskmgr.exe", L"", L"",SW_SHOW);
}
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值