ページ 11

ドラッグ&ドロップ

Posted: 2007年11月13日(火) 21:29
by Taro
ドラッグ&ドロップイベントの取り方を教えてください。

ウィンド全体へ許可してのイベントは取得できましたが、Buttonに限定しての取得ができません。

ウィンドの拡張スタイル ドラッグ&ドロップのチェックを外し、CommandButton1の拡張スタイル ドラッグ&ドロップのチェックをONにしても、ButtonのイベントコードはClickとDbClickしか表示せずにDropFileのイベント記載ができません。
また、MainWnd_DropFiles()にもイベントがきません。

どうすれば取れますか?

Posted: 2007年11月14日(水) 01:17
by konisi
MainWndProc内で頑張ってDropFilesイベントを取得して、GetCursorPosとScreenToClientでマウス座標を取得して分岐するとかそういう手段を昔使用しました。
dwMsg=WM_DROPFILESの時hDrop=wParamです。

Posted: 2007年11月15日(木) 00:24
by Taro
どうも。
分岐するのでは、マウスポインターでD&D可能な場所判別が付かないんですょ。
サブクラス化すれば出来そうなので調べていますが、よく分かりません。 

Posted: 2007年11月15日(木) 08:03
by 7
> 分岐するのでは、マウスポインターでD&D可能な場所判別が付かないんですょ。
DragAcceptFiles()関数を使ってみてはどうでしょう?

Posted: 2007年11月15日(木) 09:23
by Taro
試してみました。

コード: 全て選択

DragAcceptFiles(hMainWnd,TRUE)
ボタン部以外の場所へのD&DはDropFilesイベントが上がりますが、ボタン部でのD&Dではイベントが上がりません。
またマウスポインターでのD&D可能場所の判断もできません。

下記では、マウスポインターは期待通りですが、D&Dのイベントを受け取れません。
(コードが有っても、無くても同じ状況です)

コード: 全て選択

DragAcceptFiles(GetDlgItem(hMainWnd,CommandButton1),TRUE)

Posted: 2007年11月15日(木) 13:33
by Tomorrow
前作ったプログラムから切り貼りして作ってみました。
サブクラス化を使って実装したものです。
エディットボックス用ですが、参考にしてみてください。

http://www.2chab.net/uploader/src/up0054.zip

Posted: 2007年11月15日(木) 16:38
by Taro
EditBox1を消しButton1を貼り付けてドラッグ&ドロップ許可し下記のコードで動きました。
(D&Dを表現する手段が無かったので、Static1に表示してみました。)
ありがとうございました。