WTL FAQ(不断添加中)

来源:互联网 发布:php好学么 编辑:程序博客网 时间:2024/05/20 23:02

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中