MFC——table控件的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC——table控件的使用相关的知识,希望对你有一定的参考价值。

table控件的使用
创建自定义table类,继承自CTabCtrl
类向导,添加MFC类

创建CMyTab类

给tab控件添加变量,变量类型为刚才创建的自定义类

给tab控件添加标签

void CMyTab::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
InsertItem(0, L"A");
InsertItem(1, L"B");
InsertItem(2, L"C");
CTabCtrl::PreSubclassWindow();
}
准备3个子窗口资源

设置窗口属性为子窗口口,无边框

添加类

重复以上操作3次
把以上子窗口作为tab控件的子窗口->定义成员变量,并初始化
void CMyTab::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
InsertItem(0, L"A");
InsertItem(1, L"B");
InsertItem(2, L"C");
m_child[0] = new CMyDlgA;
m_child[0]->Create(IDD_DIALOG1,this);
m_child[1] = new CMyDlgB;
m_child[1]->Create(IDD_DIALOG2,this);
m_child[2] = new CMyDlgC;
m_child[2]->Create(IDD_DIALOG3,this);
// 把子窗口移动到和客户区一样大
CRect rt = {};
GetClientRect(&rt);
rt.DeflateRect(0, 25, 0, 0);
m_child[0]->MoveWindow(&rt);
m_child[0]->ShowWindow(SW_SHOW);
CTabCtrl::PreSubclassWindow();
}
添加按钮切换消息

void CMyTab::OnTcnSelchange(NMHDR pNMHDR, LRESULT pResult)
{
// TODO: 在此添加控件通知处理程序代码
pResult = 0;
int nSel = GetCurSel();
// 隐藏之前的窗口,只显示现在点击的这个标签所在的窗口
for (int i=0;i<3;i++)
{
m_child[i]->ShowWindow(SW_HIDE);
}
// 把子窗口移动到和客户区一样大
CRect rt = {};
GetClientRect(&rt);
rt.DeflateRect(0, 25, 0, 0);
m_child[nSel]->MoveWindow(&rt);
m_child[nSel]->ShowWindow(SW_SHOW);
}
变参函数
void Fun(int nCount, ...) {
va_list va;
va_start(va, nCount);
// 循环读取变参参数
for (int i=0;i<nCount;i++)
{
// 取int数
int n = va_arg(va, int);
char
p = va_arg(va, char);
printf("%d%s\n", n, p);
}
va_end(va);
}
int main()
{
Fun(3, 12, "12", 34, "34", 56, "12345");
Fun(2, 88,"34", 56, "12345");
return 0;
}
TABLE控件的封装
前面几步:添加table控件,自定义table类,绑定table变量,准备子窗口,和前面的table控件使用一样
提供一个变参接口给使用该table控件的人用
// 标题 对话框 对话框ID
void CMyTab01::MyInsertItem(DWORD dwCount, ...)
{
va_list va;
va_start(va, dwCount);
m_dwCount = dwCount;
for (DWORD i = 0 ; i< dwCount;i++)
{
TCHAR
pHeader = va_arg(va, TCHAR);
CDialogEx
pWnd = va_arg(va, CDialogEx*);
UINT uID = va_arg(va, UINT);
InsertItem(i, pHeader);
pWnd->Create(uID, this);
m_child[i] = pWnd;
}
va_end(va);
// 把子窗口移动到和客户区一样大
CRect rt = {};
GetClientRect(&rt);
rt.DeflateRect(0, 25, 0, 0);
m_child[0]->MoveWindow(&rt);
m_child[0]->ShowWindow(SW_SHOW);
}
对话框调用该接口,实现table控件的子窗口个数动态增加
m_tab.MyInsertItem(3,
L"我是1号", new CMyDlgA01, IDD_DIALOG1,
L"我是2号", new CMyDlgB01, IDD_DIALOG2,
L"我是3号", new CMyDlgC01, IDD_DIALOG3);

以上是关于MFC——table控件的使用的主要内容,如果未能解决你的问题,请参考以下文章

MFC 控件的使用

关于mfc 对话框 DATETIMEPICKER控件的使用

MFC中TAB控件使用问题

mfc怎么修改静态文本控件文字颜色

MFC控件消息

Visaul Studio 2015 MFC控件使用之--按钮(Button)