※ ChatGPTを利用し、要約された質問です(原文:XP/Vistaのフォームスタイルにしたら、ドラッグ時のアイコンがずれる)
XP/Vistaのフォームスタイルでアイコンのドラッグ時にずれが生じる
このQ&Aのポイント
VisualStudio2008+sp1でプログラムを作成している際に、XP/Vistaのビジュアルスタイルに変更したところ、ListViewで表示しているアイコンをドラッグすると、文字位置とアイコン位置がズレる問題が発生しました。
アイコンのドラッグ時に生じるズレを解決するために、XP/Vistaスタイルで位置補正を行ってみましたが、表示されているアイコン位置と文字位置とのズレは依然として存在します。
XP/Vistaスタイルでアイコンのドラッグ時にズレが生じないようにするためには、どのような対策を行えば良いのでしょうか?
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スタイルにて、このズレを生じさせないためには
何を行えばよいのでしょうか?
お礼
丁寧に説明していただきありがとうございます。 おかげで、カーソル位置にアイコン中心が来るようになりました。 ただ、未だに、ドラッグイメージのアイコン位置と文字位置との ズレが生じたままでしたので、もう少し調べてみます。