WTL自画按钮的实现
一.思路:
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()
- 上一篇:DirectShow系统初级指南
- 下一篇:VC++中使用内存映射文件处理大文件