对CTabView控件,有了相当了解之后,我做了一些改进。结果仅仅只是接近了预期,距离我预期的目标,还差了些。
完全不如左边的容器标题效果好。考虑再三,我决定放弃这种修补,完全从 0开始做一个TabView 控件,其实主要是 CTabCtrl控件,替换windows里面的那个。这个决定基于如下几个原因,也是我们新的控件预期实现的目标
1. 这是一个通用的TAB控件,要可以用于对话框
2. 它的颜色搭配可以调整
3. 处于激活状态,颜色方案与非活动时候不同。
4. 选项卡上可以有关闭按钮,选项卡的风格,要是google chrome 的风格
5. 当打开的窗口也足够多的时候,通过压缩选项卡的宽度来容纳
差不多就是这样,接下来,我们来看看技术上实现,TAB每次只显示一个窗口,所以类似容器的客户窗口。再加上一个维护窗口句柄的的数组就可以实现。TABView是一个窗体,里面包含另一个子窗体,CaptionBar, 用来实现选项卡标签, 另一个子窗体就是客户窗口。在没有选项卡的时候,我打算仍然会给出一个选项卡,只是与其他选项卡稍微不同,客户区域,可以指定显示一张图片。选项卡标签可以显示一个按钮和一个状态位图,
这篇文章显然必须分成若干个部分来完成。我自己就很不喜欢过长的文章,所以我也不想这样做。每次一个主题,然后去完成,我喜欢这样去做事情。
开发过程中,保持让你的控件始终能够工作,这是个很好的开发体验,不要等到全部写完代码再去测试。这是我的个人建议。
所以本节我们要完成的任务就是,搭一个控件的模板类基础框架, 这个类是你开发其他0开始控件的起点。我已经有了这么一个框架, 粘贴,查找和替换之后,就是我们TAB控件的初始代码.
头文件: MySpecTabView.h
// MySpecTabView.h : interface of the CMySpecTabView class
//
/
#pragma once
template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
class ATL_NO_VTABLE CMySpecTabCtrlImpl: public CWindowImpl< T, TBase, TWinTrai