お世話になります。
VS2015 VC++ ダイアログGUI作成において、
特定のエディットコントロールにだけファイルのD&Dを許可し、
どのエディットコントロールにD&Dされたか検出する方法で、一番ベターな方法は何でしょうか?
(PreTranslateMessageを使う方法しかないでしょうか?)
ネットでよくある以下方法だとダイアログすべてに対してD&Dが許可され、どこにD&Dされたか検出できないですよね?
・クラスウィザードでダイアログクラスに「WM_DROPFILES」メッセージのハンドラーを追加する。
・OnInitDialogでDragAcceptFiles()をコールする。
↑リソースエディター上で[Accept Files]をTrueしてもいいが、エディットコントロールだけTrueにしても、
親ダイアログもTrueじゃないとイベントが検出されない。→結果ダイアログすべてがD&D許可される。
・OnDropFiles上で任意の処理を記述する。
よろしくお願いします。
【VC++】特定のエディットコントロールだけD&Dを許可したい。
Re: 【VC++】特定のエディットコントロールだけD&Dを許可したい。
まず最初に確認したいのですが、MFC を使用しているのですよね。
質問の内容から何となく MFC を使用している感じがしました。
以前に特定のコントロールのみのドラッグ&ドロップをするプログラムを
作った記憶があったので、古いソースを漁ってみたら、VC6のソースが
見付かりました。バージョンもかなり前ですし、エディットコントロールに
ではなく、コンボボックスが対象ですが基本的には変わらないのでは
ないかと思います。
大雑把に言いますと、リソースエディタでドラッグドロップを許可する
にして、コントロール(コンポボックス)をサブクラス化していました。
MFC でしたらコントロールのサブクラス化はそんなに面倒ではない
と思いますが、最近は MFC ベースのプログラムを作ってないので、
かなり無責任モードです。
サブクラス化がベターな方法かどうかはわかりませんが、派生した
エディットコントロールのクラスでいろいろできますので、
PreTranslateMessageを使うよりは、小回りがきくのではないかと
と思います。
質問の内容から何となく MFC を使用している感じがしました。
以前に特定のコントロールのみのドラッグ&ドロップをするプログラムを
作った記憶があったので、古いソースを漁ってみたら、VC6のソースが
見付かりました。バージョンもかなり前ですし、エディットコントロールに
ではなく、コンボボックスが対象ですが基本的には変わらないのでは
ないかと思います。
大雑把に言いますと、リソースエディタでドラッグドロップを許可する
にして、コントロール(コンポボックス)をサブクラス化していました。
MFC でしたらコントロールのサブクラス化はそんなに面倒ではない
と思いますが、最近は MFC ベースのプログラムを作ってないので、
かなり無責任モードです。
サブクラス化がベターな方法かどうかはわかりませんが、派生した
エディットコントロールのクラスでいろいろできますので、
PreTranslateMessageを使うよりは、小回りがきくのではないかと
と思います。
Re: 【VC++】特定のエディットコントロールだけD&Dを許可したい。
Bullさん
仰る通りMFCです。
コントロールのサブクラス化、試してみたところ割と簡単にできました。
PreTranslateMessageでやるよりこちらのほうが良さそうですね。
ありがとうございました。
仰る通りMFCです。
コントロールのサブクラス化、試してみたところ割と簡単にできました。
PreTranslateMessageでやるよりこちらのほうが良さそうですね。
ありがとうございました。