0
是否有任何方法來調整Win32列表框的大小以適應其內容(最小大小將顯示其所有內容,不需要滾動條),只要其項目更改?如何調整Win32列表框的大小以適應其內容?
謝謝!
編輯:我需要調整列表框的寬度和高度。
是否有任何方法來調整Win32列表框的大小以適應其內容(最小大小將顯示其所有內容,不需要滾動條),只要其項目更改?如何調整Win32列表框的大小以適應其內容?
謝謝!
編輯:我需要調整列表框的寬度和高度。
你沒有指定你是否想要水平和垂直,但我會假設沒有。基本上,你需要獲得的項目數量和項目的高度和多個它們,然後添加上控制邊界的空間(除非控制是無國界的,你可能需要玩這個):
void AutosizeListBox(HWND hWndLB)
{
int iItemHeight = SendMessage(hWndLB, LB_GETITEMHEIGHT, 0, 0);
int iItemCount = SendMessage(hWndLB, LB_GETCOUNT, 0, 0);
// calculate new desired client size
RECT rc;
GetClientRect(hWndLB, &rc);
rc.bottom = rc.top + iItemHeight * iItemCount;
// grow for borders
rc.right += GetSystemMetrics(SM_CXEDGE) * 2;
rc.bottom += GetSystemMetrics(SM_CXEDGE) * 2;
// resize
SetWindowPos(hWndLB, 0, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
}
如果你想要水平尺寸,你需要選擇正確的字體到DC中,然後循環遍歷所有項目以使用GetTextExtentPoint32
來計算最大文本長度。
編輯:增加了一個計算水平尺寸的版本。
void AutosizeListBox(HWND hWndLB)
{
int iItemHeight = SendMessage(hWndLB, LB_GETITEMHEIGHT, 0, 0);
int iItemCount = SendMessage(hWndLB, LB_GETCOUNT, 0, 0);
// get a DC and set up the font
HDC hDC = GetDC(hWndLB);
HGDIOBJ hOldFont = SelectObject(hDC, (HGDIOBJ)SendMessage(hWndLB, WM_GETFONT, 0, 0));
// calculate width of largest string
int iItemWidth = 0;
for (int i = 0; i < iItemCount; i++)
{
int iLen = SendMessage(hWndLB, LB_GETTEXTLEN, i, 0);
TCHAR* pBuf = new TCHAR[iLen + 1];
SendMessage(hWndLB, LB_GETTEXT, i, (LPARAM)pBuf);
SIZE sz;
GetTextExtentPoint32(hDC, pBuf, iLen, &sz);
if (iItemWidth < sz.cx) iItemWidth = sz.cx;
delete[] pBuf;
}
SelectObject(hDC, hOldFont);
ReleaseDC(hWndLB, hDC);
// calculate new desired client size
RECT rc;
SetRect(&rc, 0, 0, iItemWidth, iItemHeight * iItemCount);
// grow for borders
rc.right += GetSystemMetrics(SM_CXEDGE) * 2;
rc.bottom += GetSystemMetrics(SM_CXEDGE) * 2;
// resize
SetWindowPos(hWndLB, 0, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
}
注意這隻適用於單列列表框;如果您使用多列列表框,如您在其他問題中所描述的那樣,那麼該方法會有所不同。 – 2015-03-13 20:51:57
事實上,我需要這兩個大小,因爲此列表框可用作文本框的工具提示選項。 – Sakura 2015-03-13 21:10:57
@TuyenTk:你能確認單個或多個列嗎? – 2015-03-13 21:16:49