首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

為 ListBox 添加水平滾動條並自動計算最佳寬度

     編輯:關於VC++

問題背景

標準 ListBox 無水平滾動條,長文本會被截斷。需啟用 WS_HSCROLL 樣式並發送 LB_SETHORIZONTALEXTENT 設置滾動範圍。

基本實現


// 資源編輯器勾選 ListBox 的 "Horizontal Scroll" 屬性
SendDlgItemMessage(hDlg, IDC_LIST, LB_SETHORIZONTALEXTENT, 500, 0); // 固定 500 像素

進階:動態計算文本像素寬度

使用 GetTextExtentPoint32 根據當前字體測量每行文本寬度,取最大值設置滾動範圍,界面更美觀。


case WM_INITDIALOG:
{
    HDC hdc = GetDC(hDlg);
    SIZE sz; int maxWidth = 0;
    TCHAR str[100];
    for (int i=0; i<100; ++i) {
        wsprintf(str, _T("This is a very very very very very long sentence - line %d"), i+1);
        GetTextExtentPoint32(hdc, str, lstrlen(str), &sz);
        if (sz.cx > maxWidth) maxWidth = sz.cx;
        SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)str);
    }
    SendDlgItemMessage(hDlg, IDC_LIST, LB_SETHORIZONTALEXTENT, maxWidth, 0);
    ReleaseDC(hDlg, hdc);
}
break;

效果對比

方案效果圖
固定 500px固定寬度過長
動態計算自適應寬度

右側微小空白屬於 GetTextExtentPoint32 考慮字符間距導致,屬正常現象。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved