利用CListBox::SetHorizontalExtent()成员可实现该功能。网上可行的方法主要是添加一个CListBox的派生类,并重载其AddString, InsertString方法。虽然使用方便,但是额外添加一个类。本文在不添加派生类的情况下实现该功能。
1. 首先建立一个对话框CMyDlg的应用程序,添加一个列表框、三个按钮(添加、编辑、删除),列表框右键属性-》Horizontal Scroll设置为true。
2. 为CMyDlg添加成员函数AdjustHScroll,代码如下:
void CMyDlg::AdjustHScroll(CListBox *pl)
{
// Find the longest string in the list box.
CString strText;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC* pDC = pl->GetDC();
CFont* pFont = pl->GetFont();
// Select the listbox font, save the old font
CFont* pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < pl->GetCount(); i++