アプリ版:「スタンプのみでお礼する」機能のリリースについて

閲覧して頂きありがとうございます。

現在、WindowsXPでvc++6.0のMFC(ダイアログベース)を利用してダイアログを作り
エディットボックスに入力されたファイルパスを利用して指定のファイルを
開く簡単なアプリを作ろうとしています。

そこでダイアログのエディットボックスの部分にファイルをドラッグ&ドロップすると
エディットボックスにドロップされたファイルのパスを表示させようとしていますが、中々できません。

状況としては、グループボックスの中にエディットボックスを作成し、
グループボックスを右クリック→プロパティ→ドラッグドロップを許可
をすることによりグループボックスにドロップの許可を与えることはできていますが
ドロップのイベントを拾うことができておりません。

※参考サイトなどをみると「WM_DROPFILES」というハンドラがあるみたいなのですが
 どこにも見当たらないです。。。

何か不明な点などあれば補足させて頂きますので、よろしくお願いします。

A 回答 (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

といった具合で
    • good
    • 0
この回答へのお礼

とても丁寧でわかりやすいご説明ありがとうございます。
無事に自分が思っているとおりに作れました。

今回は本当にありががとうございました。

お礼日時:2011/11/14 13:57

WM_DROPFILESは親のダイアログで処理するメッセージになります


ClassWizardを起動してクラス情報タブを選択
画面下部の『メッセージ フィルター(F)』を『ダイアログ』から『ウィンドウ』に変更
メッセージマップタブを選択
『オブジェクトID(I)』で親ダイアログを選択
『メッセージ(G)』の中にある『WM_DROPFILES』を選択
『関数の追加』でスケルトンを生成
といった手順ですよ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!