2012-04-11 1 views
2

私はATL::CWindowImpl<CMyCustomControl>からカスタムコントロールを派生し、DECLARE_WND_CLASS(_T("CMyCustomControl"))と宣言しました。ATL/WTLダイアログでカスタムコントロールを登録するには?

また、クラス名がCMyCustomControlのカスタムコントロールでダイアログリソースを作成しました。

コントロールを適切に登録してダイアログに表示できるようにするにはどうすればよいですか?

+1

あなたはこの質問で探しているものを見つけるかもしれません:http://stackoverflow.com/questions/575532/pre-registering-an-atl-window-class明らかにそれは不可能です。 –

+0

@ MarkRansom:Shooooot ...これは本当に "事前登録"ですか?私は本当に気にしない*それが登録されている(何もサードパーティーのことはありません)、私はちょうどそれが表示されたい...カスタムコントロールのためのかなり標準のように聞こえる... – Mehrdad

+0

あなたはリソースダイアログが作成されたときにコントロールを自動的に作成するには、明らかにWindowsはウィンドウクラスについて事前に知っていなければなりません。ダミーのコントロールを作成し、OnInitDialogでサブクラス化する方法はかなりうまくいく。 –

答えて

2

WTLでカスタムコントロールを作成する典型的な方法があります。

  1. DECLARE_WND_CLASS/DECLARE_WND_SUPERCLASS + RegisterClassEx APIは、ESP、ウィンドウクラスを実装するクラス名
  2. を介して制御をインスタンス化するためのダイアログテンプレート内の名前+カスタムコントロール参照してクラスを登録します。 CWindowImplから継承し、手動で制御を作成します。 OnCreate/OnInitDialog
  3. から

(などの強調表示色を持つ編集コントロール、カスタムリストビュー、ハイパーリンクなどの静的)、ウィンドウクラスを実装ダイアログテンプレートによって、標準コントロールをインスタンス化し、その動作を変更するためにコントロールのインスタンスをサブクラス化3つすべてでは、クラス定義のマクロだけでなく、それ以上のことをする必要があります。あなたはここで素晴らしい例を見つけるでしょう:http://www.viksoe.dk/code/all_wtl.htm "コントロール"セクションの下に。

確かに4番目の方法は、ActiveXコントロールを実装することです。

+0

viksoe.dkを忘れました。 +1 - 参考に感謝します。 – bvj

関連する問題