同じエディットボックスへのDrag&Drop(VC++/MFC)
同じエディットボックスへDrag&Dropすると
テキストが消えてしまう現象に悩んでいます。
現在、
下記のサイト
http://www.softist.com/programming/dandd/dandd.htm
のサンプルプログラムを参考に
コントロール間のDrag&Dropの仕方を学習しています。
このサンプルではエディットボックス間で文字列のコピーができるようになっていますが、
私がほしい機能は文字列の移動です。
そこで、サンプルのEditForDD.cppの
DROPEFFECT DropEffect = OleDataSrc.DoDragDrop(DROPEFFECT_COPY);
の下に、
if(DropEffect == DROPEFFECT_COPY) this->SetWindowTextA("");
という一文を加えて、Drag&Dropする際にDrag元のテキストを削除するようにしました。
その結果、異なるエディットボックス間での移動は可能になりましたが、
Drag元のエディットボックスにテキストを戻そうとすると
テキストが消えてしまいまうようになってしまいました。
このように同じエディットボックスにDrag&Dropをしても
テキストが消えないようにする方法をご存じの方はいらっしゃいませんでしょうか?
なお、開発環境は以下の通りです。
開発環境:Visual Studio 2005 Standard Edition
利用言語:VC++/MFC
OS:Windows XP
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
Revokeをして同じエディットボックスにはDrop出来ないようにし
Drag&Drop後に再びRegisterをしてはどうでしょうか?
m_DropTarget.Revoke(); //追加
DROPEFFECT DropEffect = OleDataSrc.DoDragDrop(DROPEFFECT_COPY); //DROPEFFECT_SCROLL
if(DropEffect == DROPEFFECT_COPY)
this->SetWindowTextA("");
m_DropTarget.Register(this); //追加
goo39さん、
ご回答いただきありがとうございます。
ご回答のとおり、やりましたらうまくいきました!
RevokeでDropリストからはずし、
Drag&Dropの後、Registerでリストに再追加するのですね。
1ヶ月以上悩んでいたので、感激です!
本当にありがとうございました。
No.3
- 回答日時:
例えば、
VOID CDropTarget::SetDropSrc( CWnd *pWnd )
{
m_pWndSrc = pWnd;
}
のようなメソッドを作り、
m_DropTarget.SetDropSrc( this );
DROPEFFECT DropEffect = OleDataSrc.DoDragDrop(DROPEFFECT_COPY); //DROPEFFECT_SCROLL
としてやれば良い、と思っていましたが、実際にやってみると、DoDragDrop の後で、
m_DropTarget.SetDropSrc( NULL );
としてやらなければ、次にドロップしようとしたときにドロップ不可の状態のままになってしまいました・・・。
#1 の方の方法の方が簡潔で良さそうですね。
tsukasa-12rさん、
再度、ご回答ありがとうございました。
上記のコードとCDropTarget::OnDropに
if(this->m_pWndSrc == pWnd) return FALSE;
を追加したら、うまく動きました!
確かに今回はgoo39さんの方が簡潔でしたので
そちらを採用したいと思います。
しかしながら、ドラッグ元をとる方法がわかり、
今後大いに役にたちそうな気がします。
本当にありがとうございました!
No.2
- 回答日時:
COleDropTargetの派生クラスの
OnDragEnter()、および OnDrag() で、ドロップ先がドラッグ元と同じなら
DROPEFFECT_NONE
を返すようにして、ドラッグ元にはドロップできないようにしてはどうでしょうか。
この回答への補足
tsukasa-12rさん、
ご回答ありがとうございます。
私も以前この方法でどうにかならないか考えていたのですが、
ドロップ先がOnDragEnter()、および OnDrag()の引数CWnd* pWndで取れるとして、
ドラッグ元のとり方がよくわからず断念したしだいです。
よろしければ
このドラッグ元のとり方も教えていただけないでしょうか。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 文中のto dropについて Whatever causes his popularity to d 3 2022/12/29 13:27
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- 片思い・告白 好きな人が邦楽好きで聞きたいんですけど 自分はK-POPが好きなので全然わかりません 良ければ皆さん 1 2022/07/22 23:02
- 英語 英語、助動詞のmayについて 5 2022/08/04 00:33
- レディース 下はパンツでしょうか? 3 2022/04/20 00:24
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- その他(クラウドサービス・オンラインストレージ) オンラインストレージ 3 2022/12/04 01:25
- 英語 drop a japan flickってどう言う意味ですか? 2 2022/10/24 13:58
- ノートパソコン 中古ノートパソコンで、下記の内容のもの をご紹介ください。 小生、75歳。パソコンは初歩的な知識しか 6 2022/07/13 22:13
- Excel(エクセル) VBA 1 2023/04/27 13:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ドラッグ&ドロップからの取得
-
VS2008 C# ボタンのテキストを...
-
テキストボックスの中身をリセ...
-
PythonのTkinterイベントについて
-
変数に256文字以上のテキストを...
-
テキストボックスにセルの値を...
-
テキスト内の重複文字検索
-
VBAからPDFのテキストフィールド
-
RPG(AS400)の本、サイトってあ...
-
stringのデータ型はメモ型とテ...
-
Flashのテキストボックスの「単...
-
VBAでホームページからコピーし...
-
漢字入力した値のカタカナ変換...
-
ホームぺージ制作で間違って重...
-
タイトルタグとアンカーテキス...
-
photoshopで書いた四角の枠の中...
-
YOASOBI
-
【Photoshop】レイヤー効果の境...
-
python ボタンを押すと複数の関...
-
VBScriptでMsgBoxのYesNoボック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
RPG(AS400)の本、サイトってあ...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
ホームぺージ制作で間違って重...
-
テキストボックスにセルの値を...
-
コモンダイアログのshowopenに...
-
全てのテキストボックスをセル...
-
漢字入力した値のカタカナ変換...
-
変数に256文字以上のテキストを...
-
VB6.0 でメニューを作りたいん...
-
VB.NET2005 DataGridViewでレコ...
-
DelphiのRichEditでカーソル位...
-
VBSでMid関数を使ったらエラー...
-
MFCのスタティックテキストのコ...
-
改行含むテキストの表示の仕方
-
テキストエリア内の文字列にリ...
-
チェックボックスのテキストを...
-
VB.NETで数十行のプログラムを...
-
HTMLのtextbox類に文字を残す
-
VBのチェックボックス
おすすめ情報