@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ドラッグ中のマウスカーソルについて

1
投稿者投稿内容
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-11-27 02:35
こんばんは。VB.NETの初心者です。

リストビューにて選択したItemをドラッグ中に表示される
マウスカーソルを「選択Itemが半透明状態のカーソル
(Windosでファイルをドラッグした時のように)」
にしたいのですが、方法がわからず困っています。

どなたか、ご存知でしたら教えて下さい。

<開発環境>
VS2003 VB.NET
Microsoft .NET Framework 1.1
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-27 07:25
こんにちは。

引用:

taaさんの書き込み (2005-11-27 02:35) より:

リストビューにて選択したItemをドラッグ中に表示される
マウスカーソルを「選択Itemが半透明状態のカーソル
(Windosでファイルをドラッグした時のように)」
にしたいのですが、方法がわからず困っています。



残念ながら今のところ(.NET Framework 1.1以前)では、
本来のリストビューの機能の多くがサポートされていないようです。

・仮想リストビュー
・カスタムドロー
・挿入マーク
・グループ ビュー
など
リストビューのドラッグイメージ作成も、Frameworkからでは、できないようです。
#.NETに詳しくないので間違いがあったらスイマセン

なので、ご質問の件に関しては、
P/Invoke(Windows API)で直接、リストビューを操作するしかなさそうです。


やり方は、

1.リストビューに対し、SendMessage関数でLVM_CREATEDRAGIMAGEメッセージを送り
  ドラッグ用のイメージリストを作成します。
2.リストビューアイテムのドラッグ開始時に、1.で作成したイメージリストに対して
  ImageList_BeginDrag関数とImageList_DragEnter関数を呼び出します。
3.ドラッグ移動時に、作成したイメージリストに対して
  ImageList_DragMove関数を呼び出します。
4.ドラッグ終了時、ドロップ時に
  ImageList_EndDrag関数とImageList_DragLeave関数を呼び出します。

以上で、半透明状態のドラッグイメージを描画することができます。

#ツリービューに対しても、TVM_CREATEDRAGIMAGEメッセージを送ってやれば
 同様に半透明のドラッグイメージを描画することができます。
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-11-27 13:43
Tdnr_Symさん返答ありがとうございます。
以下(●)にコメント致します。

引用:

残念ながら今のところ(.NET Framework 1.1以前)では、
本来のリストビューの機能の多くがサポートされていないようです。

・仮想リストビュー
・カスタムドロー
・挿入マーク
・グループ ビュー
など
リストビューのドラッグイメージ作成も、Frameworkからでは、できないようです。
#.NETに詳しくないので間違いがあったらスイマセン


参考になるご意見ありがとうございます。
一応、Frameworkを使用した方法をもう少し、粘って調べてみます。
今の所、私が調べた状況では

@カーソルファイルを作成
AGiveFeedbackイベントにて、「e.UseDefaultCursors = False」で
既定のカーソルを抑止。
BGiveFeedbackイベントにて、現在のカーソルイメージを
「Cursor.Current = カーソルファイル」で代入。

とこんな感じです。
ただ、この方法だとカーソルイメージが決まってしまう為、
選択したItemを半透明のドラッグイメージとして描画する事が
できそうもありませんでした。

引用:

なので、ご質問の件に関しては、
P/Invoke(Windows API)で直接、リストビューを操作するしかなさそうです。


この方法も試してみます。ありがとうございました。
1

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)