アイコン形式のリストビューを作成しているのですが、
現在のウィンドウ幅が変わっても2つずつピッタリ納まるように、
リストビューのアイコンのサイズや間隔を設定したいと思っています。
しかし、リストビューをデフォルトのまま表示してみると、
左上にいくらかのスペースが空けられた状態で始まっています。
また、CListCtrl::SetIconSpacing()で
左右のアイコンの間隔をピッタリくっつけてしまうと、
表示が壊れてしまい、左上のスペースと同じ間隔を
無理やり開けられたような表示になります(アイコンの一部が表示されない)。
このアイコン間の強制スペースのサイズというのは、
どこかから調べたり、自分で再設定したりできるものなのでしょうか?
さらに、Y方向にはテキストも入りますが、この高さも調べないと、
CListCtrl::SetIconSpacing()に適切な値が渡せないのでしょうか?
>このアイコン間の強制スペースのサイズというのは、
>どこかから調べたり、自分で再設定したりできるものなのでしょうか?
>さらに、Y方向にはテキストも入りますが、この高さも調べないと、
>CListCtrl::SetIconSpacing()に適切な値が渡せないのでしょうか?\
アイテムの位置やサイズについてはGetItemRectで取れたと思います。
いっそSetItemPositionで個別に設定してしまうとか。
リストビューに1つだけアイテムを追加し、
SetItemPositionに(0,0)を渡してみましたが、
それでもやはり左上にいくらか隙間ができていました。
この隙間のサイズというのは、リストを追加する前にはわからないものなのでしょうか…。
SetItemPositionで並べてみると確かに一番左側のアイテムだけ
幅が空いてしまうようですね。
水平スクロールバーをなしにしたらなんとかごまかせないでしょうか・・・
> SetItemPositionで並べてみると確かに一番左側のアイテムだけ
> 幅が空いてしまうようですね。
解説ありがとうございます。
左だけでなく、上方向にもちょっとだけ空いてしまいますよね。
左方向よりは狭いようですが。
1つだけダミーで(0,0)の位置に追加してみて、
そのアイテムの左上座標とリストビュー全体の左上座標を比べてしまえば、
とりあえず左側のオフセットは計算できるかもしれませんし、
そうすれば右側のオフセット値も自分で考慮して、
リストビューのサイズに依存せずに2つずつセンタリングして置いていくという
当初の目的も果たせるのかもしれませんが、こうするしか無いのでしょうか…。
できればそのような遠回りをせずに、
挿入開始前にはアイテムのサイズや間隔を計算しておきたいのですが…。
試していませんが、CListCtrl::GetOriginはどうでしょう?
> 試していませんが、CListCtrl::GetOriginはどうでしょう?
ご意見ありがとうございます。
リストビューのアイテム追加前にCListCtrl::GetOriginを
コールしてみましたが、値は(0, 0)でした。
左上のスペース部分の値を教えてくれるものではないようです…。