タブファイラー開発ブログ

Tablacus ExplorerやX-Finderの作者のブログ

ListViewの一覧表示の幅を調整する

ListViewの一覧表示の幅を調整するには、ListView_SetColumnWidth で iCol を 0 にすれば設定できます。

しかし、バグだと思うんですが、最初の項目に移動しても半分切れて見えないみたいに左右がずれてしまう場合があるんです。
そんな訳でX-FinderとかTablacus Explorerでは以下のようなコードで対処しています。

ListView_SetColumnWidth(m_hwndLV, 0, 1);
ListView_SetColumnWidth(m_hwndLV, 0, nWidth);
ListView_EnsureVisible(m_hwndLV, ListView_GetNextItem(m_hwndLV, -1, LVNI_ALL | LVNI_FOCUSED), FALSE);

 
一度、幅を 1 にしてから指定したい幅を指定しています。そして、フォーカス位置に表示位置を移動しています。

今回のTablacus Explorerの調整でx64で一覧表示の際に自動的に文字列の最も長いものにあわせるのが上手くいかないので自前で幅を設定するようにしたら、このおかしな動作が出たのでした。
そういえば、X-Finderでもなにか対処した覚えがあったなと思い出して、対処方法をソースを引っ張り出してきました。

詳しくは Tablacus Explorerのソース をご覧ください。