当您使用 WTL 时,您可以自由复制表示内置对象的控件:
// Notice that CWindow is passed by _copy_, because it only wraps the HWND
int OnNotifyFormat(CWindow wndFrom, int nCommand) { ... }
现在,如果我想制作自己的控件,很容易说:
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
struct CMyControlImpl: public CWindowImpl<T, TBase, TWinTraits>
{
std::vector<int> internal_info;
BEGIN_MSG_MAP_EX(...)
...
END_MSG_MAP()
};
struct CMyControl : public CMyControlImpl<CMyControl>
{
DECLARE_WND_CLASS_EX(TEXT("MyControl"), 0, COLOR_WINDOW)
};
但现在的问题是我不能简单地说:
void OnFooHappened(CMyControl control)
{
}
因为CMyControl
它不仅仅是一个句柄——它包含数据本身!
关于这种复制行为,制作与内置 ATL/WTL 类一致的控件类的正确方法是什么?