WTL: 从零建立自己的CMyTabCtrl(二)

来源:互联网 发布:零起点学通c语言 编辑:程序博客网 时间:2024/05/18 02:01

            废话不说了,先看看效果图(目前的代码虽然可用,但并不是完整的,也没有经过详细的测试,有兴趣者可以以此为起点建立自己的TAB控件):


         编写自己的 CMyTabCtrl 最先需要解决的问题是客户窗口,也就是当前TAB指定的那个窗口。我们在可以参照容器类里面的代码来写自己的段代码。本文最后,

下面这段代码对应了,TAB的所有窗口和当前窗口的成员变量:

struct _PAGESTRUCT{_PAGESTRUCT(){memset( this, 0, sizeof(_PAGESTRUCT));}HWND    hWnd;TCHARcaptionText[64];// 标签文字intcapTextLen;// 文字长度POINTcapPoint;// 标签位置SIZEcapSize;// 标签大小//SIZEtrueSize;// 实际显示的大小intiImage;LPVOID m_pData;};ATL::CSimpleArray<_PAGESTRUCT*> m_pageArray;ATL::CWindow m_wndClient;

        最开始的时候,我是打算标题栏另外建立一个窗口的,实际编程的过程中,不这样做可能更好。因此这个窗口的很大一部分区域是被客户窗口占据的,我当时考虑可能需要使用DoubleBuffer,不然可能在绘制标题的时候会有闪烁。如果使用DoubleBuffer,那么新建一个标题窗口就是必须的了,否则连客户区域也要double那会浪费很多内存,由于图片太大,对应能也有不好的影响。编程的时候,暂时先不建立标题窗口,观察DoubleBuffer的必要性,实际测试下来,刷新区域处理的好的话,并没有闪烁问题。

            另外我也为这个控件增加了tooltip,userdata等功能,很多功能未经测试。我已经将测试这个控件的整个工程的源代码作为资源上传,有兴趣的可以从下面的连接下载:

           由于源代码已经写出来了,有点不知道从哪里解释了,有兴趣的自己看吧。


  下载测试工程:   WTLTABCTRL.Zip


0 0