WTL: CTabView 源码分析

本文旨在分析CTabView的源码,以改进CTabViewImpl,创建类似VS2010的界面组件。关键成员包括ATL::CContainedWindowT<CTabCtrl>,它扩展了基类功能。通过消息映射,CTabView实现了选项卡拖动和右键菜单功能。此外,CWindow m_wndTitleBar用于更新标题内容。CTabView还定义了TBVN_PAGEACTIVATED和TBVN_CONTEXTMENU通知,允许对用户交互进行定制处理。
摘要由CSDN通过智能技术生成

        分析CTabView的原因,是我想改进现有的 CTabViewImpl, 最终目标是建立一套界面类似VS2010的控件集合。我已经做了一些工作,改进了菜单部分,对于分割窗口也进行了改写,剩下部分就是这个 CTabView了。我已经大致看了下整个 CTabViewImpl的代码,显然这个地方的改动的部分会比较多。现在我们就带着这个目的来分析目标源码。

      

template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
class ATL_NO_VTABLE CTabViewImpl : public ATL::CWindowImpl<T, TBase, TWinTraits>
{
public:
	DECLARE_WND_CLASS_EX(NULL, 0, COLOR_APPWORKSPACE)

这个分类的关键成员是: ATL::CContainedWindowT<CTabCtrl> m_tab;

           继续向下解释之前,要先弄清楚这个 ATL::CContainedWindowT容器类的作用。CContainedWindowT 是一个模板类,它起到对基类行为进行扩充的目的。

CContainedWindowT<CEdit>, CContainedWindowT<CTabCtrl>, 在主窗口里面这样实现的成员,它的消息会给映射到主窗口类的一个分段。我们看看 CTabViewImpl 的构造函数和消息映射。

	CTabViewImpl() :
			m_nActivePage(-1), 
			m_cyTabHeight(0), 
			m_tab(this, 1), 
                        ==============
	{
		m_ptStartDrag.x = 0;
		m_ptStartDrag.y = 0;
	}
// Message map and handlers
	BEGIN_MSG_MAP(CTabViewImpl)
		MESSAGE_HANDLER(WM_CREATE, OnCreate)
		MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
		MESSAGE_HANDLER(WM_SIZE, OnSize)
		MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
		MESSAGE_HANDLER(WM_GETFONT, OnGetFont)
		MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
		NOTIF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值