新しいCOMコンポーネントMESSAGE_HANDLER(WM_INITDIALOG、OnInitDialogを)

 

ATLコンポーネントを作成した後、簡単なATLオブジェクトを追加ダイアログリソースを追加し、初期化関数に応答せず、何のm_hWndをハンドルを見つかりませんでした。

そして、ダイアログリソースを追加し、ATLコントロールを追加した後、ATLコンポーネントを再作成し、そこにハンドルm_hWndを、まだ初期化関数に応答しない、奇妙で、他のほとんどすべてのメッセージマップは、あります!

ときに古いプロジェクト開いたところ、メッセージマップ 

CHAIN_MSG_MAP(CComCompositeControl <T>)//旧

新しいプロジェクトとの違いがあります

CHAIN_MSG_MAP(CComControl <T>)//新

だから、ccomcontrolの種類を確認し、新しい世界を発見しました:

ダイアログボックスには、ハンドルとm_hWndをしています

公共CAxDialogImpl <T>、

それは問題ではありません

しかし、理由のは、継承されました

公共CComControl <T>

同時に、

公共CComCompositeControl <T>

これは、前出のエッセイ、このような使用は非常にトリッキーCComControl <T>から継承された、とされます。

メッセージ鎖は、初期化に応答して、CComCompositeControl <T>を置き換え、それらのソースを表示した後、そのような実装が示されているのOnInitDialog

 

おすすめ

転載: www.cnblogs.com/ice-arrow/p/11727799.html