4 个解决方案
#1
当列出超出时自动显示水平滚动条。
#2
重新设置水平滚动条的长度
CString str;
CSize sz;
int dx=0;
CDC* pDC = pmyListBox->GetDC();
for (int i=0;i < pmyListBox->GetCount();i++)
{
pmyListBox->GetText( i, str );
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
// Set the horizontal extent only if the current extent is not large enough.
if (pmyListBox->GetHorizontalExtent() < dx)
{
pmyListBox->SetHorizontalExtent(dx);
ASSERT(pmyListBox->GetHorizontalExtent() == dx);
}
pmyListBox->ReleaseDC(pDC);
CString str;
CSize sz;
int dx=0;
CDC* pDC = pmyListBox->GetDC();
for (int i=0;i < pmyListBox->GetCount();i++)
{
pmyListBox->GetText( i, str );
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
// Set the horizontal extent only if the current extent is not large enough.
if (pmyListBox->GetHorizontalExtent() < dx)
{
pmyListBox->SetHorizontalExtent(dx);
ASSERT(pmyListBox->GetHorizontalExtent() == dx);
}
pmyListBox->ReleaseDC(pDC);
#3
引用luhongyu2108回复:
ListBox的属性中添加WS_HSCROLL,因为CListBox是从CWnd继承的,
所以可以设置这个属性。
然后使用SetHorizontalExtent设置水平滚动范围
下面的代码根据列表框中内容设置范围
// The pointer to my list box.
extern CListBox* pmyListBox;
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC* pDC = pmyListBox->GetDC();
CFont* pFont = pmyListBox->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 < pmyListBox->GetCount(); i++)
{
pmyListBox->GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
pmyListBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
pmyListBox->SetHorizontalExtent(dx);
ListBox的属性中添加WS_HSCROLL,因为CListBox是从CWnd继承的,
所以可以设置这个属性。
然后使用SetHorizontalExtent设置水平滚动范围
下面的代码根据列表框中内容设置范围
// The pointer to my list box.
extern CListBox* pmyListBox;
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC* pDC = pmyListBox->GetDC();
CFont* pFont = pmyListBox->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 < pmyListBox->GetCount(); i++)
{
pmyListBox->GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
pmyListBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
pmyListBox->SetHorizontalExtent(dx);
#4
我在MFC设计中也遇到过你的问题,尝试了他的代码,直接在你调用listbox进行显示的功能函数里(一般是一个按键的函数里,点此按键可让你指定的listbox里显示)添加此代码。
// The pointer to my list box.
extern CListBox* pmyListBox;
是定义你所使用的listbox的类指针,你可以在工程类的头文件里加上这句话,功能函数里就不用加这句话了,其他代码可以直接copy下来,别忘把你定义的listbox替换这里的pmyListBox!
(比如我的代码中
void CLUDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST1,listbox1);
}定义的是listbox1,所以将listbox1替换这里的pmyListBox,就OK啦!!!)
// The pointer to my list box.
extern CListBox* pmyListBox;
是定义你所使用的listbox的类指针,你可以在工程类的头文件里加上这句话,功能函数里就不用加这句话了,其他代码可以直接copy下来,别忘把你定义的listbox替换这里的pmyListBox!
(比如我的代码中
void CLUDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST1,listbox1);
}定义的是listbox1,所以将listbox1替换这里的pmyListBox,就OK啦!!!)
#1
当列出超出时自动显示水平滚动条。
#2
重新设置水平滚动条的长度
CString str;
CSize sz;
int dx=0;
CDC* pDC = pmyListBox->GetDC();
for (int i=0;i < pmyListBox->GetCount();i++)
{
pmyListBox->GetText( i, str );
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
// Set the horizontal extent only if the current extent is not large enough.
if (pmyListBox->GetHorizontalExtent() < dx)
{
pmyListBox->SetHorizontalExtent(dx);
ASSERT(pmyListBox->GetHorizontalExtent() == dx);
}
pmyListBox->ReleaseDC(pDC);
CString str;
CSize sz;
int dx=0;
CDC* pDC = pmyListBox->GetDC();
for (int i=0;i < pmyListBox->GetCount();i++)
{
pmyListBox->GetText( i, str );
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
// Set the horizontal extent only if the current extent is not large enough.
if (pmyListBox->GetHorizontalExtent() < dx)
{
pmyListBox->SetHorizontalExtent(dx);
ASSERT(pmyListBox->GetHorizontalExtent() == dx);
}
pmyListBox->ReleaseDC(pDC);
#3
引用luhongyu2108回复:
ListBox的属性中添加WS_HSCROLL,因为CListBox是从CWnd继承的,
所以可以设置这个属性。
然后使用SetHorizontalExtent设置水平滚动范围
下面的代码根据列表框中内容设置范围
// The pointer to my list box.
extern CListBox* pmyListBox;
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC* pDC = pmyListBox->GetDC();
CFont* pFont = pmyListBox->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 < pmyListBox->GetCount(); i++)
{
pmyListBox->GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
pmyListBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
pmyListBox->SetHorizontalExtent(dx);
ListBox的属性中添加WS_HSCROLL,因为CListBox是从CWnd继承的,
所以可以设置这个属性。
然后使用SetHorizontalExtent设置水平滚动范围
下面的代码根据列表框中内容设置范围
// The pointer to my list box.
extern CListBox* pmyListBox;
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC* pDC = pmyListBox->GetDC();
CFont* pFont = pmyListBox->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 < pmyListBox->GetCount(); i++)
{
pmyListBox->GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
pmyListBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
pmyListBox->SetHorizontalExtent(dx);
#4
我在MFC设计中也遇到过你的问题,尝试了他的代码,直接在你调用listbox进行显示的功能函数里(一般是一个按键的函数里,点此按键可让你指定的listbox里显示)添加此代码。
// The pointer to my list box.
extern CListBox* pmyListBox;
是定义你所使用的listbox的类指针,你可以在工程类的头文件里加上这句话,功能函数里就不用加这句话了,其他代码可以直接copy下来,别忘把你定义的listbox替换这里的pmyListBox!
(比如我的代码中
void CLUDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST1,listbox1);
}定义的是listbox1,所以将listbox1替换这里的pmyListBox,就OK啦!!!)
// The pointer to my list box.
extern CListBox* pmyListBox;
是定义你所使用的listbox的类指针,你可以在工程类的头文件里加上这句话,功能函数里就不用加这句话了,其他代码可以直接copy下来,别忘把你定义的listbox替换这里的pmyListBox!
(比如我的代码中
void CLUDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST1,listbox1);
}定义的是listbox1,所以将listbox1替换这里的pmyListBox,就OK啦!!!)