• 締切済み

ツリービューでのドラッグイメージの作成方法

VC++でエクスプローラもどきを作成しています。 ListViewからTreeViewへ、ファイルをドラッグする際、 マウスカーソルにファイルイメージを追従させようとしています。 ListView内でのドラッグは作成できたのですが、 TreeViewへ移った際に、CreateDragImageでドラッグを作成するためには HTREEITEMを渡さなくてはいけません。 TreeViewで表示させているのは、フォルダアイコンのみなので、 ファイルをドラッグした際に、該当するようなitemがありません。 TreeViewへitemをinsertして表示させるわけにはいかないのですが、 このような場合、どのようにして、 ドラッグイメージを作成すべきなのでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

勘違いしていませんか? TreeViewのCreateDragImageは TreeViewのアイテムをドラッグする場合に使うもので ドロップターゲットになっている場合は使いませんよ

lhouse
質問者

補足

勘違いしてました。。。 あくまで、そのView内でのドラッグが対象となるのですね。。 では、ListView→TreeViewへのドラッグの場合は どうすべきなのか分かりますでしょうか?

関連するQ&A

  • リストビューでのドラッグ&ドロップでの反転表示

    VC++にてエクスプローラもどきを作成していて、 ドラッグ&ドロップの操作を実装中です。 ListViewにて、OnLButtonDown内で マウスで押下されたフォルダイメージを CreateDragImageで作成しマウスカーソルを変更しました。 そして、ドラッグ中に、別フォルダへカーソルが移動した際、 そのフォルダを反転させるために、 OnDragOver内で、まず、全ての選択状態をクリアし、 for ( i = 0; i < list.GetItemCount(); i++ ){   item.iItem = i;   ListView_GetItem( list, &item2 );   item2.state = 0;   item2.stateMask = LVIS_SELECTED;   ListView_SetItem( list, &item ); } 対象となるフォルダのLV_ITEMを取得後に、 item.state = LVIS_SELECTED; item.stateMask = LVIS_SELECTED; ListView_SetItem( list, &item ); を行い選択状態に変更させました。 一応、ドラッグ&ドロップは、ある程度できているのですが、 描画が汚く、下記の2点について困っています。 1.ドラッグされたフォルダの反転表示が綺麗ではない(画像参照) 2.カーソル下に何のフォルダも無い場合は、   全ての選択状態をクリアだけでDragOverの処理を終了しているが、   前回選択状態にしたフォルダが反転表示(汚い状態で…)されたまま なにか、修正方法はありますでしょうか?

  • VSC# ListViewへのドラッグ&ドロップ

    エクスプローラにある複数のファイル同時にListViewにドラッグ&ドロップしてそのファイル名をListViewに追加したいのですが、どのようにすれば出来るのでしょうか? ※ファイル名の表示はすでに出来ています。複数追加のやり方を知りたいです。 教えてください、お願いします><

  • ListViewで新規フォルダ作成イメージ

    こんにちは。いつもお世話になっております。 早速ですが質問させて下さい。 TreeViewとListViewを使用し、Windowsエクスプローラのような画面を作成しています。 削除や名前の変更処理などについては完成したのですが、新規フォルダの作成処理だけがうまくいきません。 現状は以下のような処理を考えています。 1.新規フォルダ作成要求があった場合にListViewにダミーのデータ(Text="新しいフォルダ")を作成 2.ダミーデータを選択状態にする 3.BeforeLabelEditイベントを発生させる (ソースコードがなくてごめんなさい) これによってエクスプローラでフォルダの作成を実施した場合と同様のイメージになります。 ただ問題はこの後で、ユーザーがフォルダ名をデフォルトの"新しいフォルダ"から変更した場合AfterLabelEditイベントが発生するのですが、変更しなかった場合にイベントが発生しないことにあります。 実際のフォルダ作成の処理はイベントの中に記述しているため、名称が変更されなかった場合はフォルダの作成が行われません。(ListViewの見た目だけ表示される) 名称が変更されなくてもフォルダ作成の処理を行うにはどうしたらよいでしょうか? どうかご教示下さい。

  • ツリービューを使って、エクスプローラのようなものを作りたい。その二

    以前、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=372373 の『ツリービューを使って、エクスプローラのようなものを作りたい』という質問をした者です。 そこで教えていただいたプログラムを使って、一応は出来たのですが、このツリービュー内にフォルダだけでなく、ファイルも同時に表示させることは出来るんでしょうか。 実は、今まではDriveListBox、DirListBox、FileListBoxを組み合わせていたのですが、ツリービューに統合しようとしています。 前の質問で教えていただき、フォルダはしっかりと表示されるようになりましたが、ファイルは表示されません。 一階層だけなら、ファイルも表示できるプログラムは以前から作っていたので出来ると思っていたのですが、どうしても出来ません。 ファイルを選択してそれをRichTextBoxなどに表示させるというのが目的です。前述の三つの組み合わせや、教えていただいたプログラムにFileListBoxを付けてもいいんですが、それだと不恰好になってしまうので…… TreeViewにファイルを表示させる方法を教えてください。よろしくお願いします。

  • XP/Vistaのフォームスタイルにしたら、ドラッグ時のアイコンがずれる

    VisualStudio2008+sp1にてプログラムを作成しています。 http://msdn.microsoft.com/ja-jp/library/aa289524%28VS.71%29.aspx http://www.koutou-software.co.jp/junk/apply-winxp-visualstyle.html 上記サイトを参考に、ダイアログ上のコントロールを XP/Vistaのビジュアルスタイルに変更したところ、 ListViewにて表示しているアイコンをドラッグすると、 ビジュアルスタイルを変更する前と比べ、 文字位置とアイコン位置にズレが生じていました。 添付1が、以前までのスタイルでドラッグした場合。 添付2が、XPスタイルに変更してドラッグした場合。 添付3が、XPスタイルにてドラッグしたものを、ListViewの アイテム上に重ねてみたものです。 下記が、OnDragOverで、ドラッグ時のイメージを作成している箇所の抜粋です。 --------------------抜粋 ここから------------------------ GetCursorPos( &pt ); /* アイテムの幅・高さを取得 */ list.GetItemRect( m_DragItem->iItem, item_rect, LVIR_BOUNDS ); /* マウスカーソルがアイテム中央にくるように補正 */ pt.x -= (item_rect.right-item_rect.left) / 2; pt.y -= (item_rect.bottom-item_rect.top) / 2; ScreenToClient( &pt ); m_DragImage->DragMove( pt ); --------------------抜粋 ここまで------------------------ ※m_DragImageはCImageListの変数です 以前のスタイルであっても、 カーソルの中心にアイコンが来ないため、 位置の補正を加えています。 XPスタイルで位置補正を行ってみても、 表示されているアイコン位置と文字位置との ドラッグで表示したアイコン・文字位置がズレているため 違和感があります。 XP/Vistaスタイルにて、このズレを生じさせないためには 何を行えばよいのでしょうか?

  • DragEnterイベントについて(VS2008、ドラッグ&ドロップ)

    VisualStudio2008 C# で開発をしています。 ListViewにエクスプローラーからファイルをドラッグ&ドロップしようとしているのですが、うまくできません。 いろいろと調べて下記の3点を抑えればできるのかと思っていますが、思ったように動きません。 ListViewのAllowDrop=True; DragEnterイベントでe.Effect = DragDropEffects.Copy; DragDropイベントでDropした後の処理 きちんと記述しているつもりですが、DragEnterイベントが発生しません。 ちなみに、同じListViewの要素をドラッグ&ドロップするとDragEnterイベントは発生するので、あくまで外部(エクスプローラーなど)からドラッグされたものが受け付けないようです。 何が原因なのでしょうか? ほかに設定などあるのでしょうか?

  • VB.NET リストビュー内で移動

    いつもお世話になっております。 ListViewとImageListを組み合わせ画像一覧表示できるように プログラムをしたのですが、 その際にドラッグ&ドロップでListView内の画像を移動(並び替え)を行いたいのですが、そのような方法はあるのでしょうか。 ListViewからListViewの移動は行えたのですが、一つのListView内での 移動が検索してもわからず投稿致しました。 ご教授お願い致します。

  • エクスプローラ上のドラッグでもファイル移動しない設定方法

    Windowsの98またはXPのエクスプローラ上では、ファイルまたはフォルダをドラッグすると何も確認メッセージ無しに移動してしまいます。右ドラッグの場合は、「移動・コピー・キャンセル」の選択の確認メッセージが表示されます。作業中にドラッグしたつもりはなくとも、ドラッグしてしまい、ファイルやフォルダが移動されてしまい、しかもその移動に気が付かず、後になってファイルやフォルダを探すことがあります。ドラッグした際、右ドラッグと同様にメッセージを表示させるか、またはドラッグしても表示無しにファイルやフォルダを移動させないように設定する方法はありますか?

  • ドラッグしたファイルのパスを取得したい

    Windows2000(sp3) VisualBasic6.0(sp5) で開発しています。 テキストボックス付きのあるアプリケーションを作成し、そのアプリのテキストボックス上へ、エクスプローラーからファイルをドラッグ&ドロップすると、そのファイルのフルパスを表示する。 ということをしたいと考えています。 例 コマンドプロンプトに、エクスプローラーからファイルをドラッグ&ドロップすると、そのファイルのパス付きの名称が表示される。 良い方法をご存知の方いらっしゃいましたら教えてください。 よろしくお願いします。

  • Alcohol 120%にドラッグ&ドロップ

    Alcohol 120%にエクスプローラからISOファイルをドラッグ&ドロップ出来ません。ウィンドウにアイコンをドラッグすると、禁止を示すマウスカーソルに変わります。何が原因か分かりますでしょうか?正確な数字は忘れましたが、古いバージョンでは出来ていました。 環境はWindows10 Proです。