掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストのカラム幅を最適化するには? (ID:64550)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VC++6.0での開発です。 CListCtrlの拡張クラスを作成しているのですが、全カラム幅を最適化(ヘッダ及びアイテムが、…など省略なしに全て可視となる状態に)する手法について教えて頂きたく。 対象の全カラムに、CListCtrl::SetColumnWidth を LVSCW_AUTOSIZE_USEHEADER 指定で実行すれば良いものと考えておりましたが、初期状態で不可視となるアイテム(初期状態からスクロールバーで移動しなければ見えないアイテム)が、"xxxx..."となり最適化することが出来ません。以下のソースです。 void CListCtrlExt::SetAutoSizeColumnWidth() { // カラム(ヘッダ)の最大数を取得 int nColCount = GetColumnCount(); // 内部関数を使用 for (int nCol=0; nCol<nColCount; nCol++) { // ヘッダ幅による最適化 CListCtrl::SetColumnWidth(nCol, LVSCW_AUTOSIZE_USEHEADER); } } ですので、以下のように変更しました。 void CListCtrlExt::SetAutoSizeColumnWidth() { // カラム(ヘッダ)の最大数を取得 int nColCount = GetColumnCount(); // 内部関数を使用 // アイテム最大数を取得 int nItemCount = CListCtrl::GetItemCount();//■追加■ for (int nCol=0; nCol<nColCount; nCol++) { // ヘッダ幅による最適化 CListCtrl::SetColumnWidth(nCol, LVSCW_AUTOSIZE_USEHEADER); //■追加■ ここから ---------------------------------------- // ヘッダ幅による最適化により設定された幅をデフォルト値とする int nMaxWidth = CListCtrl::GetColumnWidth(nCol); for (int nItem=0; nItem<nItemCount; nItem++) { // アイテムテキストの幅を取得 CString strItemText = m_pList->GetItemText(nItem, nCol); int nTmpWidth = m_pList->GetStringWidth(strItemText); // アイテムテキストを表示するためにマージンを設定 nTmpWidth += 16; // 最大の幅となる場合は情報を更新 if (nTmpWidth > nMaxWidth) { nMaxWidth = nTmpWidth; } } // 最大幅をヘッダ幅に設定 m_pList->SetColumnWidth(nCol, nMaxWidth); //■追加■ ここまで ---------------------------------------- } } ## アイコン描画時に対応するための処理も追加予定です。 期待する動きは実現出来たのですが、作り的にどうも好ましく感じず、悩んでおります。回避方法をご存知の方いらっしゃいましたら、教えて頂きたく。 ちなみに、オーナー描画はしておりませんが、仮想リスト(LVS_OWNERDATA)で作成しております。 よろしくお願い致します。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.