1

レポート モードのリスト コントロールがあります。

このリスト コントロールにデータを入力し、すべての列のサイズを自動調整しますLVM_SETCOLUMNWIDTH。データによっては、リスト コントロールに水平スクロール バーが表示される場合と表示されない場合があります。

ここまでは順調ですね。しかし、リスト コントロールの最小幅を取得したいので、水平スクロールバーは必要ありません。そのサイズを知っていれば、リスト コントロールのサイズを変更して、水平スクロール バーを取り除くことができます。

何か案は ?

4

2 に答える 2

-1

怠惰な解決策は、スクロールバーが消えるまで幅を増やすことです。

RECT r;
::GetWindowRect(hlist, &r);

RECT rc;
::GetClientRect(hparent, &rc);

POINT p { rc.right, 0 };
::ClientToScreen(hparent, &p);
int limit = p.x - r.right;

for (int i = 0; i < limit; i++)
{
    if (!(::GetWindowLong(hlist, GWL_STYLE) & WS_HSCROLL))
        break;

    r.right++;
    ::SetWindowPos(hlist, 0, 0, 0, r.right - r.left, r.bottom - r.top,
        SWP_NOREDRAW | SWP_NOMOVE | SWP_NOZORDER);
}
于 2015-06-04T08:20:20.480 に答える