CDialogImpl クラスから継承した WTL を使用してダイアログを作成し、メイン ダイアログ内に別のダイアログを作成し、この 2 番目の子ダイアログ内にリスト コントロールを作成しました。リスト コントロールにドラッグ アンド ドロップ機能を追加したかったので、Web で WM_DROPFILES メソッドと Ole ドロップ ターゲットについて読みましたが、後者を選択しました。これに従って、IDropTarget インターフェイス メソッドを実装しまし た。すべてのダイアログでファイルを受け入れるオプションを TRUE に設定し、子ダイアログ クラスで IDropTarget をインスタンス化し、その WM_INITDIALOGUE ハンドラで次のメソッドを呼び出しました。
//drag& drop
lpDropTarget = (LPDROPTARGET)new TDropTarget(m_hWnd);
CoLockObjectExternal(lpDropTarget, true, true);
// register the HWND as a drop target
RegisterDragDrop(m_hWnd, lpDropTarget);
lpDropTarget は次のようにインスタンス化されます。
LPDROPTARGET lpDropTarget;
そしてそれはそれについてです。以前に Ole を実際に使用したことがないので、運を求めて次のシナリオを試しました。
List コントロール HWND の RegisterDragDrop に登録し、
WM_OLEDROP WM_USER + 1
送信した通知を受け取るように親ダイアログを設定しました。ドラッグ アンド ドロップのカーソルは表示されましたが、IDataTarget の関数の実装への呼び出しはありませんでした。子ダイアログ用のRegisterDragDropとその通知も。
メインダイアログのRegisterDragDropとその通知も。
後のケース (2 & 3) では、ドラッグ アンド ドロップのカーソルさえ表示されず、ドラッグ アンド ドロップが許可されていないことが示されました。これで、すべてのダイアログとリスト コントロールが、ビジュアル スタジオ デザイナーからのファイルを受け入れるように設定されました。ATL /WTL/WINAPI のみを使用し、MFC を使用しないように制限されています。私は何を間違っていますか?