MFC总结(3)---MFC中TabControl控件的使用(使用封装)
2015-10-23 14:09
633 查看
1、创建一个mfc项目,在自动生成的对话框模板中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。
2、添加一个Tab Control控件,创建一个CTabCtrl的子类CMyTablCtrl,并为其关联一个CMyTabCtrl类型的控件变量m_tab。
3、创建两个对话框,ID分别设为IDD_PROGRAM_DIALOG、IDD_PROCESS_DIALOG,两者都将Border属性设为None,Style属性设为Child。在对话框模板IDD_PROGRAM_DIALOG中加入一个List Control控件,ID设置为IDC_PROGRAM_LIST ,View属性设为Report,即为报表风格,Single Selection属性设为True,并为其生成对话框类CProgramDlg;在对话框模板IDD_PROCESS_DIALOG中也加入一个List
Control控件,ID设置为IDC_PROCESS_LIST ,View属性设为Report,即为报表风格,Single Selection属性设为True,并为其生成对话框类CProcessDlg。
4、在MyTablCtrl.h中,添加三个方法一个变量。代码如下
5、在MyTabCtrl.cpp中对上述方法进行实现。
7. 我们要实现的是标签页的切换效果,所以还要为m_tab标签控件的通知消息TCN_SELCHANGE添加处理函数,并修改如下:
案例完整代码:
http://download.csdn.net/detail/obuyiseng/9208389
2、添加一个Tab Control控件,创建一个CTabCtrl的子类CMyTablCtrl,并为其关联一个CMyTabCtrl类型的控件变量m_tab。
3、创建两个对话框,ID分别设为IDD_PROGRAM_DIALOG、IDD_PROCESS_DIALOG,两者都将Border属性设为None,Style属性设为Child。在对话框模板IDD_PROGRAM_DIALOG中加入一个List Control控件,ID设置为IDC_PROGRAM_LIST ,View属性设为Report,即为报表风格,Single Selection属性设为True,并为其生成对话框类CProgramDlg;在对话框模板IDD_PROCESS_DIALOG中也加入一个List
Control控件,ID设置为IDC_PROCESS_LIST ,View属性设为Report,即为报表风格,Single Selection属性设为True,并为其生成对话框类CProcessDlg。
4、在MyTablCtrl.h中,添加三个方法一个变量。代码如下
#pragma once #include <vector> using std::vector; // CMyTabCtrl class CMyTabCtrl : public CTabCtrl { DECLARE_DYNAMIC(CMyTabCtrl) public: <span style="white-space:pre"> </span>CMyTabCtrl(); <span style="white-space:pre"> </span>virtual ~CMyTabCtrl(); <span style="white-space:pre"> </span>//添加Tab的方法 <span style="white-space:pre"> </span>void AddTab(DWORD dwCount, ...); <span style="white-space:pre"> </span>//添加Dlg方法 <span style="white-space:pre"> </span>void AddDlg(DWORD dwCount, ...); <span style="white-space:pre"> </span>//显示当前tab的方法 <span style="white-space:pre"> </span>void SetSelAndShow(int nSel); <span style="white-space:pre"> </span>//存放Dlg <span style="white-space:pre"> </span>vector<CDialogEx *> m_vt; protected: <span style="white-space:pre"> </span>DECLARE_MESSAGE_MAP() };
5、在MyTabCtrl.cpp中对上述方法进行实现。
//添加tab的方法 void CMyTabCtrl::AddTab(DWORD dwCount, ...) { va_list ap; va_start(ap, dwCount); //遍历添加 for (DWORD i = 0; i < dwCount; i++) { TCHAR * tName = va_arg(ap, TCHAR*); InsertItem(i, tName); } va_end(ap); } //添加Dlg方法 void CMyTabCtrl::AddDlg(DWORD dwCount, ...) { va_list ap; va_start(ap, dwCount); for (DWORD i = 0; i < dwCount; i++) { CDialogEx *pName = va_arg(ap, CDialogEx*); int id = va_arg(ap, int); pName->Create(id, this); m_vt.push_back(pName); } va_end(ap); } //显示当前tab的方法 void CMyTabCtrl::SetSelAndShow(int nSel) { CRect rect; GetClientRect(&rect); rect.DeflateRect(1, 26, 3, 2); m_vt[nSel]->MoveWindow(rect); m_vt[nSel]->ShowWindow(SW_SHOW); SetCurSel(nSel); }6、在 BOOL C任务管理器Dlg::OnInitDialog()中使用上面定义好的方法。
BOOL C任务管理器Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); 。。。。。。 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 //添加Tab标题 m_tab.AddTab(2, _T("应用程序"), _T("进程")); //添加Dlg m_tab.AddDlg(2, new CProgramDlg, IDD_PROGRAM_DIALOG, new CProcessDlg, IDD_PROCESS_DIALOG ); //显示第一个Dlg m_tab.SetSelAndShow(0); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
7. 我们要实现的是标签页的切换效果,所以还要为m_tab标签控件的通知消息TCN_SELCHANGE添加处理函数,并修改如下:
void CMyTabCtrl::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 *pResult = 0; int n = GetCurSel(); CRect rt; GetClientRect(&rt); rt.DeflateRect(1, 26, 3, 2); for (int i = 0; i < m_vt.size(); i++) { if (i == n) { m_vt[i]->MoveWindow(rt); m_vt[i]->ShowWindow(SW_SHOW); } else { m_vt[i]->ShowWindow(SW_HIDE); } } }
案例完整代码:
http://download.csdn.net/detail/obuyiseng/9208389
相关文章推荐
- oracle中 decode()函数简介
- 九度王道考研机试真题 2011-2北大题目1156:谁是你的潜在朋友 hash
- kony移动开发平台源码github地址
- 使用spring dynamic modules的理由
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- 九度王道考研机试真题 2010-哈工1054:字符串内排序
- Linux服务器性能测试工具介绍
- sqlite中把缓存文件回滚到数据库的命令
- 九度王道考研机试真题 2010-2北邮 题目1173:查找.cpp
- Linux 服务器运维实用命令
- java获取项目地址或tomcat绝对地址
- Python -- 单元测试
- lucene Lock obtain timed out: Lock@
- Android自定义控件及自定义属性
- table表头固定
- Android自定义控件及自定义属性
- 作業系統之前的程式 for stm32f4discovery (2) - 點亮 led, c version
- amazon爬虫
- 详解spring事务属性
- 1.3 SDK更新不了问题解决