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 クラスと一致するコントロール クラスを作成する正しい方法は何ですか?