Program 언어/MFC
tab ctrl
건실한청년
2022. 6. 9. 15:12
#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);
구글 검색하다 탭클래스에 다른 다이얼로그ex 클래스를 추가하는 방법 서술