原碼中 `rc_item.bottom = rc_item.top + (char_h * 16);` 設定下拉列表高度,但 `char_h` 計算可能不含外部行距,且 `SetButtonInfo` 寬度用 `char_w * 32` 可能過大/過小。
CClientDC dc(this);
CFont* pOld = dc.SelectObject(&font);
TEXTMETRIC tm; dc.GetTextMetrics(&tm);
int charW = tm.tmAveCharWidth;
int charH = tm.tmHeight + tm.tmExternalLeading; // 含行距
dc.SelectObject(pOld);
SetButtonInfo(8, IDC_FONTNAME_LIST, TBBS_SEPARATOR, charW * 20); // 顯示 ~20 字元
CRect rcBtn;
GetItemRect(8, &rcBtn); // 取得按鈕矩形
CRect rcCombo = rcBtn;
rcCombo.bottom = rcBtn.top + charH * 12; // 下拉顯示 12 項
if (!font_name_list.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST|CBS_SORT,
rcCombo, this, IDC_FONTNAME_LIST)) return -1;
font_name_list.SetFont(&font);
font_name_list.MoveWindow(rcCombo); // 確保尺寸生效