
閲覧して頂きありがとうございます。
現在、WindowsXPでvc++6.0のMFC(ダイアログベース)を利用してダイアログを作り
エディットボックスに入力されたファイルパスを利用して指定のファイルを
開く簡単なアプリを作ろうとしています。
そこでダイアログのエディットボックスの部分にファイルをドラッグ&ドロップすると
エディットボックスにドロップされたファイルのパスを表示させようとしていますが、中々できません。
状況としては、グループボックスの中にエディットボックスを作成し、
グループボックスを右クリック→プロパティ→ドラッグドロップを許可
をすることによりグループボックスにドロップの許可を与えることはできていますが
ドロップのイベントを拾うことができておりません。
※参考サイトなどをみると「WM_DROPFILES」というハンドラがあるみたいなのですが
どこにも見当たらないです。。。
何か不明な点などあれば補足させて頂きますので、よろしくお願いします。
No.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
といった具合で
とても丁寧でわかりやすいご説明ありがとうございます。
無事に自分が思っているとおりに作れました。
今回は本当にありががとうございました。
No.1
- 回答日時:
WM_DROPFILESは親のダイアログで処理するメッセージになります
ClassWizardを起動してクラス情報タブを選択
画面下部の『メッセージ フィルター(F)』を『ダイアログ』から『ウィンドウ』に変更
メッセージマップタブを選択
『オブジェクトID(I)』で親ダイアログを選択
『メッセージ(G)』の中にある『WM_DROPFILES』を選択
『関数の追加』でスケルトンを生成
といった手順ですよ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
エディットボックスの入力制限について
C言語・C++・C#
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
6
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
7
水平スクロールができない。
C言語・C++・C#
-
8
ラベル(スタティックテキスト)内での改行。
C言語・C++・C#
-
9
最大化と最小化ボタン
C言語・C++・C#
-
10
エディットボックスのフォントを変えたい
C言語・C++・C#
-
11
MFC ポップアップメニューのチェック表示について
C言語・C++・C#
-
12
CStringをwchar_tに変換したい
C言語・C++・C#
-
13
CEdit の内容が変わった時にメッセージを表示させたい
C言語・C++・C#
-
14
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
15
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
16
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
17
CFileDialogでフォルダだけを選択させる
C言語・C++・C#
-
18
エディットコントロールのイベントハンドラ
Microsoft ASP
-
19
リストコントロールのデータの変更を検知したい
C言語・C++・C#
-
20
MFCでOnPaintのタイミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エディットコントロールでEnter...
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
[MFC] CWnd::MessageBoxの警告...
-
ダイアログ表示時にチェックボ...
-
このコンパイルエラーの意味に...
-
DateAdd関数について質問があり...
-
構造体からクラスを派生させる方法
-
DebugクラスとTraceクラスの違い
-
イベントにAddHandlerされてい...
-
IncludeではなくClassで宣言す...
-
VisualC++ドキュメント/ビュー...
-
MessageBoxを継承したい
-
VC++ 7.1 で メインウィンドウ...
-
関数の呼び出し元の検索
-
C++で継承元のクラスの代入演算...
-
リストコントロールをウィンド...
-
OnPaintとOnDraw関数の違いにつ...
-
オーバーライド関数の呼び出し...
-
【ASP.NET】 独自で作成したク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
FriendとPublicの違い。。。
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールでEnter...
-
イベントにAddHandlerされてい...
-
MFCアプリのコマンドラインでパ...
-
ボタンのオーナードローについて
-
MFCのドラッグ&ドロップについて
-
オーバーライド関数の呼び出し...
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
ダイアログクラスのコントロー...
-
【ASP.NET】 独自で作成したク...
-
個々の関数について継承してい...
-
MFCのCListCtrlでスクロールを検出
-
DataGridViewのセルに斜線を引...
-
[MFC] CWnd::MessageBoxの警告...
-
CMainFrameクラスの使い方
-
関数の呼び出し元の検索
おすすめ情報