【VC++】特定のエディットコントロールだけD&Dを許可したい。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kame
記事: 6
登録日時: 7年前

【VC++】特定のエディットコントロールだけD&Dを許可したい。

#1

投稿記事 by kame » 7年前

お世話になります。

VS2015 VC++ ダイアログGUI作成において、
特定のエディットコントロールにだけファイルのD&Dを許可し、
どのエディットコントロールにD&Dされたか検出する方法で、一番ベターな方法は何でしょうか?
(PreTranslateMessageを使う方法しかないでしょうか?)

ネットでよくある以下方法だとダイアログすべてに対してD&Dが許可され、どこにD&Dされたか検出できないですよね?
・クラスウィザードでダイアログクラスに「WM_DROPFILES」メッセージのハンドラーを追加する。
・OnInitDialogでDragAcceptFiles()をコールする。
 ↑リソースエディター上で[Accept Files]をTrueしてもいいが、エディットコントロールだけTrueにしても、
  親ダイアログもTrueじゃないとイベントが検出されない。→結果ダイアログすべてがD&D許可される。
・OnDropFiles上で任意の処理を記述する。

よろしくお願いします。

Bull
記事: 149
登録日時: 9年前

Re: 【VC++】特定のエディットコントロールだけD&Dを許可したい。

#2

投稿記事 by Bull » 7年前

まず最初に確認したいのですが、MFC を使用しているのですよね。
質問の内容から何となく MFC を使用している感じがしました。

以前に特定のコントロールのみのドラッグ&ドロップをするプログラムを
作った記憶があったので、古いソースを漁ってみたら、VC6のソースが
見付かりました。バージョンもかなり前ですし、エディットコントロールに
ではなく、コンボボックスが対象ですが基本的には変わらないのでは
ないかと思います。

大雑把に言いますと、リソースエディタでドラッグドロップを許可する
にして、コントロール(コンポボックス)をサブクラス化していました。
MFC でしたらコントロールのサブクラス化はそんなに面倒ではない
と思いますが、最近は MFC ベースのプログラムを作ってないので、
かなり無責任モードです。

サブクラス化がベターな方法かどうかはわかりませんが、派生した
エディットコントロールのクラスでいろいろできますので、
PreTranslateMessageを使うよりは、小回りがきくのではないかと
と思います。

kame
記事: 6
登録日時: 7年前

Re: 【VC++】特定のエディットコントロールだけD&Dを許可したい。

#3

投稿記事 by kame » 7年前

Bullさん

仰る通りMFCです。
コントロールのサブクラス化、試してみたところ割と簡単にできました。
PreTranslateMessageでやるよりこちらのほうが良さそうですね。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る