封装CTabCtrl--->CTabSheet

本文介绍了如何封装MFC的CTabCtrl控件,通过创建CTabSheet类,简化多页面程序的开发过程,提高编程效率。
摘要由CSDN通过智能技术生成

MFC中的CTabCtrl控件用起来特别麻烦,封装一下,使制作多页面程序更加方便。

.h文件

#pragma once
#include "vector"
using namespace std;

#define MAX_PAGES 1000

struct pages
{
	CDialog *m_pages;
	UINT m_IDD;
	CString m_title;
};

class CTabSheet : public CTabCtrl
{
	DECLARE_DYNAMIC(CTabSheet)

public:
	CTabSheet();
	virtual ~CTabSheet();

protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);
	BOOL DeletePage(CString szTitle);
	BOOL DeletePage(UINT site);
	BOOL AddPage(CString szTitle, CDialog * pDialog, UINT ID,bool ShowFirst = true);
	void SetRect(UINT nIdx);
public:
	UINT m_PageNum;
	vector <pages> m_TabPages;
	UINT m_nCurrentPage;
};

.cpp文件

#i
/* 使用方法: 添加对话框资源,并且各个子对话框资源的属性应设置为:Style为Child,Border为None。 为这些对话框建立类(直接从CDialog继承)如CPage1、CPage2…… 在主对话框的类中添加成员变量:CPage1 m_Page1;、CPage2 m_Page2;…… 在主对话框资源中,加入一个Tab Control,并且适当调整位置和大小。利用ClassWizard来为这个Tab Control创建 一个CTabSheet的控件变量m_TabSheet。 在主对话框的OnInitDialog()加入: m_TabSheet.AddPage("tab1", &m_page1, IDD_DIALOG1); m_TabSheet.AddPage("tab2", &m_page2, IDD_DIALOG2); …… 如果要给标签加上图标,在AddPage之前设置好ImageList: //为TabCtrl控件添加图标 m_imageList.Create(16, 16, ILC_COLOR32, 1, 1); CBitmap bitmap1,bitmap2; bitmap1.LoadBitmap(IDB_BITMAP1); bitmap2.LoadBitmap(IDB_BITMAP2); m_imageList.Add(&bitmap1, RGB(0,0,0)); m_imageList.Add(&bitmap2, RGB(0,0,0)); m_TabSheet.SetImageList(&m_imageList); //给TabCtrl添加页 m_TabSheet.AddPage(_T("Page1"), &m_Page1, m_Page1.IDD, 0); m_TabSheet.AddPage(_T("第二页"), &m_Page2, m_Page2.IDD, 1); 很不可思议的是,我在测试中,如果在工程中没有把TabCtrl的标签设置成左边或右边的话, 那么在运行时修改标签的位置为左边或右边时会出现问题,但是只要曾经设置过TabCtrl的标签为左边或右边后, 以后运行不管工程中的TabCtrl的标签是怎样设置的,在运行时都可以正确的修改其标签的位置。 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值