tab封装MFC
#pragma once #include <vector> using std::vector; // CMyTabCtrl class CMyTabCtrl : public CTabCtrl { DECLARE_DYNAMIC(CMyTabCtrl) public: CMyTabCtrl(); virtual ~CMyTabCtrl(); // m_ctrlTab.InsertDlg(5, // L"呵呵1", ID_DLGA, &DlgA, // L"呵呵2", ID_DLGB, &DlgB, // L"呵呵3", ID_DLGC, &DlgC, // L"呵呵4", ID_DLGD, &DlgD, // L"呵呵5", ID_DLGE, &DlgE, ); void InsertDlg(DWORD dwCount, ...) { va_list vl; va_start(vl, dwCount); TCHAR* szName = NULL; DWORD dwId = 0; CDialogEx* pDlg = NULL; CRect rt = {}; GetClientRect(rt); rt.DeflateRect(1, 23, 1, 1); for (DWORD i = 0; i < dwCount;i++) { // 获取选项的名字 szName = va_arg(vl, TCHAR*); //获取对话框的ID dwId = va_arg(vl, DWORD); //获取子对话框的对象指针 pDlg = va_arg(vl, CDialogEx*); //添加一项 InsertItem(i, szName); //创建子窗口 pDlg->Create(dwId, this); pDlg->MoveWindow(rt, TRUE); m_vecDlg.push_back(pDlg); } m_vecDlg[0]->ShowWindow(SW_SHOW); va_end(vl); } vector<CDialogEx*> m_vecDlg; protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult); };
// MyTabCtrl.cpp : 实现文件 // #include "stdafx.h" #include "01 Tab控件的封装.h" #include "MyTabCtrl.h" // CMyTabCtrl IMPLEMENT_DYNAMIC(CMyTabCtrl, CTabCtrl) CMyTabCtrl::CMyTabCtrl() { } CMyTabCtrl::~CMyTabCtrl() { } BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl) ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CMyTabCtrl::OnTcnSelchange) END_MESSAGE_MAP() // CMyTabCtrl 消息处理程序 //注意:反射消息,用以处理当选项改变时,窗口的显式隐藏问题 void CMyTabCtrl::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 int nSel = GetCurSel(); for (int i = 0; i < m_vecDlg.size();i++) { //找到被选择的项,将其显示出来 if (i == nSel) { m_vecDlg[i]->ShowWindow(SW_SHOW); } //非选择项,将其隐藏 else m_vecDlg[i]->ShowWindow(SW_HIDE); } *pResult = 0; }
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 m_ctrlTab.InsertDlg(4, L"呵呵1", IDD_DLGA, new CDlgA, L"呵呵2", IDD_DLGB, new CDlgB, L"呵呵3", IDD_DLGC, new CDlgC, L"呵呵4", IDD_DLGD,new CDlgD);
让数据变得更安全!