プロジェクトで ATL と WTL を組み合わせて使用し、 から独自のクラスを派生させましたCWindowImpl
。これは次のようになります。
class CMyControl : public CWindowImpl<CMyControl>
{
public:
DECLARE_WND_CLASS(_T("MyClassName"))
...
BEGIN_MSG_MAP(CMyControl)
...
END_MSG_MAP()
};
これで問題ありませんCMyControl::Create
。コントロールのインスタンスを作成するために使用すると、内部的には正常に機能し、CWindowImpl::Create
関数は Win32 クラス (この場合は と呼ばれますMyClassName
) を登録します。
ただし、この動作 (インスタンスの作成時に Win32 クラスが登録される) が頭痛の種です。Win32 呼び出しを使用してウィンドウを作成する別のサードパーティ ライブラリでクラス名を使用できるように、事前にクラスを登録できるようにしたいのですが、CreateWindowEx
これを行う簡単な方法が見つかりません。現在、クラス名static
として使用してこれを回避し、クラスをそれにアタッチするために使用しますが、これは面倒です。CreateWindowEx
CMyWindow::SubclassWindow
CWindowImpl
実際にウィンドウを作成せずに派生クラスを登録する方法を知っている人はいますか?クラス名をCreateWindowEx
正常に渡すことができますか? この問題に最初に遭遇することはできないため、ATL ウィンドウでこれを行う標準的な方法があると思います。