標準 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考慮字符間距導致,屬正常現象。