MFC_2.10选项卡控件的封装

选项卡控件的封装

1.新建默认MFC项目

2.添加资源Dialog,属性style改child,边框改none,添加类取名CMyDialog1;

同理,CMyDialog2;

3.类向导,添加MFC类-CTabCtrl类,取名CMyTabCtrl。

4.CMyTabCtrl类添加自定义封装函数

VOID CMyTabCtrl::InesrtTabColumn(int count, ...)
{
va_list valist;
va_start(valist, count);

for (int i = 0; i < count; ++i)
{
// 获取字符串类型的值
LPCWSTR Text = va_arg(valist, LPCWSTR);

// 添加到选项卡
InsertItem(i, Text);
}

va_end(valist);
}

// 创建窗口必须要[对象][id]
VOID CMyTabCtrl::InsertTabDialog(int count, ...)
{
va_list valist;
va_start(valist, count);

// 计算出需要移动的位置
CRect Rect;
GetClientRect(&Rect);
Rect.DeflateRect(17, 44, -9, -12);

for (int i = 0; i < count; ++i)
{
// 获取对话框
CDialog* Dlg = va_arg(valist, CDialog*);

// 获取资源的 id
UINT DlgId = va_arg(valist, UINT);
Dlg->Create(DlgId);

// 移动窗口
Dlg->MoveWindow(&Rect);

// 将对话框添加到容器中
DialogVec.push_back(Dlg);
}

ShowTabDialog(0);

va_end(valist);
}


VOID CMyTabCtrl::ShowTabDialog(int index)
{
for (int i = 0; i < DialogVec.size(); ++i)
{
if (i == index)
DialogVec[i]->ShowWindow(SW_NORMAL);
else
DialogVec[i]->ShowWindow(SW_HIDE);
}
}

 

5.CMyTabCtrl类添加选项卡响应消息-消息-选择=TCN_SELCHANGING

添加。编辑程序

BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CMyTabCtrl::OnTcnSelchange)
END_MESSAGE_MAP()
// CMyTabCtrl 消息处理程序
void CMyTabCtrl::OnTcnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
{

// 获取点击了第几个
int index = GetCurSel();

// 显示指定的
ShowTabDialog(index);

*pResult = 0;
}

6.CMyTabCtrl头文件写

#include <vector> using namespace std;

vector<CDialog*> DialogVec;

7.系统默认Dialog添加绑定变量,取名m_TabCtrl,类型为CMyTabCtrl。

头文件添加CMyTabCtrl.h

8.系统默认Dialog相关cpp初始化

 

#include "CMyDialog1.h"
#include "CMyDialog2.h"

// 添加选项卡和名字
m_TabCtrl.InesrtTabColumn(2, L"第一个", L"第二个");

// 添加具体的对话框和id
m_TabCtrl.InsertTabDialog(2,
new CMyDialog1, IDD_DIALOG1,
new CMyDialog2, IDD_DIALOG2);

 

猜你喜欢

转载自www.cnblogs.com/ltyandy/p/10928354.html
今日推荐