- ベストアンサー
MFCのドラッグ&ドロップについて
- WindowsXPでvc++6.0のMFCを利用して、ダイアログベースのアプリを作成する際に、エディットボックスにドラッグ&ドロップされたファイルのパスを表示させる方法がわかりません。
- グループボックスの中にエディットボックスを作成し、グループボックスにドロップの許可を与えることはできていますが、ドロップのイベントを拾うことができません。
- 参考サイトなどをみると「WM_DROPFILES」というハンドラがあるみたいなのですが、どこにも見当たりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません 先の回答はDialogクラスで処理する場合でした EditコントロールでD&Dを処理したいのであれば CEditを継承した独自クラスが必要になります クラスビューまたはメニューの挿入から『クラスの新規作成』 クラスの種類を『MFCクラス』 クラス名を 作成するクラス名 たとえば『CMyEdit』など 基本クラスを 『CEdit』 として OKをクリック クラスビューでCMyEditクラスを選択して 右クリック > Windowsメッセージハンドラの追加を実行 左側の『Windowsメッセージ/イベント新規作成(N)』で『WM_DROPFILES』を選択 『追加と編集(D)』または『ハンドラの追加(A)』をクリックしてスケルトンを生成 ダイアログエディタで親ダイアログを表示 テキストボックスを選択して クラスウィザードを実行 > メンバ変数タブを選択 ID_EDIT1などクラスを変更するIDを選択して 変数の追加 をクリック メンバー変数 を設定 カテゴリーを『コントロール』 変数のタイプを新規で作ったクラスに変更 上の例なら『CMyEdit』に OKをクリック 新規に作ったクラスを ダイアログクラスで使えない旨のメッセージボックスが表示されるが OKクリックして ClassWizardを終了する ダイアログクラスのヘッダーファイルの冒頭に #include "MyEdit.h" を追加する 場所は ダイアログクラス定義の直前がいいと思います // この辺りに追加 ///////////////////////////////////////////////////////////////////////////// // CMFCTestDlg ダイアログ Class CMFCTestDlg : public CDialog といった具合で
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
WM_DROPFILESは親のダイアログで処理するメッセージになります ClassWizardを起動してクラス情報タブを選択 画面下部の『メッセージ フィルター(F)』を『ダイアログ』から『ウィンドウ』に変更 メッセージマップタブを選択 『オブジェクトID(I)』で親ダイアログを選択 『メッセージ(G)』の中にある『WM_DROPFILES』を選択 『関数の追加』でスケルトンを生成 といった手順ですよ
お礼
とても丁寧でわかりやすいご説明ありがとうございます。 無事に自分が思っているとおりに作れました。 今回は本当にありががとうございました。