掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ドロップ禁止場所へドラッグした際にドロップ禁止のイメージを表示するには? (ID:54243)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
あいるさんご指導ありがとうございます。 返信が遅くなりまして大変申し訳ありません。 最初にちょっと気になったのですが・・・ >ここでははじめましてのあいるです。 これは別の所で知り合っているという意味でしょうか? それともあいるさんがこの掲示板では初めて発言する という意味の挨拶なのでしょうか? すみません、本題に入ります。 原因がわかりました。単純なコーディングミスでした。 あいるさんに書いて頂いたソースコードと 自分のソースコードを見比べていて気づいたのですが、 私はドラッグイメージの描画とドロップ禁止イメージの描画を if文で分岐して記述しているのですが、ドラッグイメージの 描画の方ではDragEnterとDragMoveを行っていたが、 ドロップ禁止イメージの描画の方では行っていなかった というの原因でした。 以下間違っていたソースコード。 if ((hitem = HitTest(point, &flags)) != NULL) { m_pimagelist->DragLeave(this); SelectDropTarget(hitem); m_pimagelist->DragEnter(NULL, m_ScreenPoint); m_pimagelist->DragMove(m_ScreenPoint); } else { SetCursor(AfxGetApp()->LoadCursor(IDC_NODROP)); } ↑これではドロップ禁止場所でドラッグイメージの描画が 行われないのは当たり前でした。失礼致しました。 ただ、DragEnterの第一引数が"this"ではやはりウィンドウ内 での描画指定になっているようでしたので"NULL"にしました。 以下修正後のソースコード。 ----OnMouseMove内---- HTREEITEM hitem; UINT flags; //ドラッグ状態にある。 if (m_bDragging) { SetCapture(); m_ScreenPoint.x = point.x; m_ScreenPoint.y = point.y; ClientToScreen( &m_ScreenPoint ); static HCURSOR oldCursol; static bool flag = false; //ドロップ禁止場所からドロップ許可場所へ戻ってきた場合、 //通常のカーソルに戻す。 if (flag == true) { SetCursor(oldCursol); } //ドロップ許可場所では通常のカーソルを設定。 if ((hitem = HitTest(point, &flags)) != NULL) { m_pimagelist->DragLeave(this); SelectDropTarget(hitem); m_hitemDrop = hitem; flag = false; } else { //ドロップ禁止場所ではドロップ禁止イメージのカーソルを設定。 oldCursol = SetCursor(AfxGetApp()->LoadCursor(IDC_NODROP)); flag = true; } //ドラッグイメージの描画。 m_pimagelist->DragEnter(NULL, m_ScreenPoint); m_pimagelist->DragMove(m_ScreenPoint); } --------------------- と言った具合に致しました。 一応やりたい動きは出来ましたので、[解決]チェックは 入れておきますが、おかしな点がありましたらご指摘を 宜しくお願い致します。 とおりさん、あいるさんありがとうございました。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.