有关WTL做的很多有用的控件: http://www.viksoe.dk/code/
以下转贴于:http://hi.baidu.com/lbird/blog/item/531a3873a140711c8601b0e8.html
FAQ1: 如果你用WTL7.5和VC6.0/ATL3.0,并且定义了_ATL_STATIC_REGISTRY。在编译时你会
得到提示“ambiguous symbol ATL”的错误。因为定义_ATL_STATIC_REGISTRY将使
atlbase.h文件内包含statreg.h文件。而statreg.h文件内声明了另一个ATL名字空间
造成冲突。要解决此问题可以把
#include <atlbase.h>
改为
#define ATL ATLFIX
#include <atlbase.h>
#undef ATL
namespace ATL = ::ATLFIX;
FAQ2: 如何让一个模板类来处理某一类窗口消息
例,class CACComboBox : public CWindowImpl<CACComboBox,CComboBox>
CACComboBox是一个组合框模板类,现在设计另一模板类专门处理组合框的WM_PAINT消息
这样做的好处有利于控件的界面由类来组合,卸换。
步骤:
1、 声明一模板类,必须派生自CmessageMap,可以由模板类参数来决定界面的效果
如:template <class T, COLORREF t_crFrameolor = RGB(172,168,153) , UINT t_uType = 1>
class CComboBoxFrameT : public CmessageMap
t_crFrameColor是组合框边框颜色,t_utype是组合框皮肤的效果
2、 声明BEGIN_MSG_MAP/ END_MSG_MAP()宏
3、 宏内添加MSG_WM_PAINT( OnPaint )宏处理WM_PAINT消息
4、 声明定义消息处理函数:OnPaint
5、 窗口类中派生项添加:public CComboBoxFrameT<CACComboBox>
6、 在窗口类中添加CHAIN_MSG_MAP(CComboBoxFrameT<CACComboBox>)宏,包含CcomboBoxFrame
的消息处理。
7、 CcomboBoxFrameT内中要使用窗口类时:T* pT = static_cast<T*>(this);
FAQ3: 控件如何使用消息反射
步骤:
1、 在能收到通知消息的窗口的消息宏中添加REFLECT_NOTIFICATIONS(),窗口就会把没处理的
的通知消息反射给控件。
2、 在控件的消息宏或消息链中添加 REFLECTED_COMMAND_CODE_HANDLER_EX等列系宏,
该类宏还有REFLECTED_NOTIFY_HANDLER_EX,REFLECTED_NOTIFY_ID_HANDLER_EX,
REFLECTED_NOTIFY_CODE_HANDLER_EX,等多个宏,定义在atlcrack.h中