龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

WTL自画按钮的实现

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
一.思路: Windows 为控件提供了自画(owner draw)的能力,程序员可以通过这一机制实现非常酷的控件外观。WTL(Windows Template Library)提供了一个CownerDraw模板,用来对控件的自画操作提供支

  一.思路:

  Windows 为控件提供了自画(owner draw)的能力,程序员可以通过这一机制实现非常酷的控件外观。WTL(Windows Template Library)提供了一个CownerDraw模板,用来对控件的自画操作提供支持。

  COwnerDraw 的声明为如下形式:

template <class T>
class CownerDraw

 ……                       

};

  从上面的代码可以看出,它没有从任何基类或模板派生,它并不是一个窗口类。它只为参数T(T必须是一个支持自画的控件类)提供自画支持。除了自画以外,我们也许还想让按钮具有ToolTip功能,或者看起来象一个位图按钮,最好还能在位图的背景下显示文字,或者上面显示位图下面显示文字。这些功能我们都可以通过自画操作来实现,但是那样会很麻烦,利用WTL提供的CbitmapButtonImpl模板,我们只需要简单地继承再加上自画能力就可以实现上述功能。现在看一看自画按钮的声明:

class CownerDrawButton : public CbitmapButtonImpl<CownerDrawButton>,

public CownerDraw<CownerDrawButton>

…… 

  它采用多继承的方式从两个模板派生,从而不但具有了自画的能力,而且也是一个位图按钮。

  二、COwnerDraw 模板

  CownerDraw模板提供了一组消息映射宏和相应的响应函数。如:

  BEGIN_MSG_MAP(COwnerDraw< T >)

    MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)

    ……

 ALT_MSG_MAP(1)

    MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem)

  ……

  END_MSG_MAP() 

精彩图集

赞助商链接