CListBox支持水平滚动条

原创 2006年06月08日 16:00:00

class CListBoxEx : public CListBox
{
// Attributes
public:
 int  m_nMaxWidth;

// Operations
public:
 int  AddString(LPCTSTR lpszItem);
 int  DeleteString(int nIndex);
 int  InsertString(int nIndex,LPCTSTR lpszItem);
 void ResetContent();
 void UpdateWidth(LPCTSTR lpszItem);

...

};

// ListBoxEx.cpp : implementation file
CListBoxEx::CListBoxEx()
{
 m_nMaxWidth = 0;
}

...
// CListBoxEx message handlers
int CListBoxEx::AddString(LPCTSTR lpszItem)
{
 int nResult = CListBox::AddString(lpszItem);
 if (nResult<0)
 {
  return nResult;
 }
 UpdateWidth(lpszItem);

 return nResult;
}

int CListBoxEx::InsertString(int nIndex,LPCTSTR lpszItem)
{
 int nResult = CListBox::InsertString(nIndex,lpszItem);
 if (nResult<0)
 {
  return nResult;
 }

 UpdateWidth(lpszItem);

 return nResult;
}

void CListBoxEx::ResetContent()
{
 CListBox::ResetContent();
 m_nMaxWidth = 0;
}

int CListBoxEx::DeleteString(int nIndex)
{
 int nResult = CListBox::DeleteString(nIndex);
 if (nResult<0)
 {
  return nResult;
 }
 
 CFont *pFont = CListBox::GetFont();  //考虑不同字体时的情况
 CClientDC dc(this);
 dc.SelectObject(pFont);
 m_nMaxWidth = 0;
 for (int i=0;i<CListBox::GetCount();i++)
 {
  CString str;
  CListBox::GetText(i,str);
  CSize sz = dc.GetTextExtent(str);
  sz.cx += (3 * ::GetSystemMetrics(SM_CXBORDER)); //考虑有垂直滚动条时加上滚动条宽度
  if (sz.cx>m_nMaxWidth)
  {
   m_nMaxWidth = sz.cx+2;
  }
 }
 CListBox::SetHorizontalExtent(m_nMaxWidth);

 return nResult;
}

void CListBoxEx::UpdateWidth(LPCTSTR lpszItem)
{
 CFont *pFont = CListBox::GetFont();
 CClientDC dc(this);
 dc.SelectObject(pFont);
 CSize sz = dc.GetTextExtent(lpszItem,_tcslen(lpszItem));
 sz.cx += (3*::GetSystemMetrics(SM_CXBORDER));
 if (sz.cx>m_nMaxWidth)
 {
  m_nMaxWidth = sz.cx+2;
  CListBox::SetHorizontalExtent(m_nMaxWidth);
 }
}

为CListBox加上智能水平滚动条

在用MFC开发软件过程中,经常会遇到MFC基本控件满足不了我们的需要的时候,这时候就需要根据实际需求派生或重写MFC基本控件。这种情况我不只一次碰到了。以下是为CListBox加上智能水平滚动条,其思...
  • Arcsinsin
  • Arcsinsin
  • 2013年11月09日 10:31
  • 3057

为CListBox加上智能水平滚动条

转自:为CListBox加上智能水平滚动条-stug1980-ChinaUnix博客
  • u012564690
  • u012564690
  • 2014年06月29日 16:51
  • 1288

MFC带自动水平滚动条ListBox

CHorzListBox类继承自CListBox, 可以根据内容自动显示调整水平滚动条
  • ayang1986
  • ayang1986
  • 2016年07月26日 16:34
  • 1275

为CListBox垂直滚动条,自动滚动,文字显示不全问题!

这个题目,其实和我用的项目没什么关系,不过顶一下吧,我主要是用的垂直滚动条。就是滚动条是根据信息自动滚动了,但是文字会显示不全所以还是使用SetCurSel这个接口来直接实现了,毕竟现在要求还不是很严...
  • u012307430
  • u012307430
  • 2016年06月01日 16:26
  • 1169

为CListBox加上智能水平滚动条

作者:俞良军 发布日期:2004-1-2 20:05:51 在MFC中,用列表框(CListBox)来显示多个字符串是一种很方便的方法。但缺省的列表框水平滚动条不够智能——这里智能的含义是:在...
  • dragoo1
  • dragoo1
  • 2017年05月26日 22:22
  • 215

为CListBox加上智能水平滚动条

在MFC中,用列表框(CListBox)来显示多个字符串是一种很方便的方法。但缺省的列表框水平滚动条不够智能——这里智能的含义是:在应该出现的时候出现,不应该出现的时候消失,而且应能自动调节自己的大小...
  • zhaoxiatengkong_1
  • zhaoxiatengkong_1
  • 2013年09月05日 00:16
  • 664

QTreeView 设置水平滚动条

默认QTreeView的滚动条设置是Qt::ScrollBarAsNeeded.也就是默认值。不修改的话是根据需要显示滚动条的。 我在QTreeView里面添加了item item里面有文本...
  • Maybe______
  • Maybe______
  • 2016年12月22日 09:52
  • 1034

多个div水平排列并出现横向滚动条

前几天做了一个静态页面(见http://todo.yajunw.com),要实现多个div水平排列,并且自动出现横向滚动条。本来以为只需父级ul元素的overflow-x:auto;overflow-...
  • wuyajun1124
  • wuyajun1124
  • 2014年11月30日 14:48
  • 3372

ListBox 水平滚动条智能滚动的实现方法

1.  选菜单 Insert/New Class,设新创建类的名字为CMyListBox,其基类为CListBox,其它选项采用缺省值。单击OK,VC自动生成MyListBox.cpp和MyListB...
  • dearwind153
  • dearwind153
  • 2015年12月14日 22:23
  • 1437

解决CListCtrl闪烁及水平滚动条不能跟踪拖动的问题(MFC)

项目中用到一个界面如下图所示,在View上有个CPropertySheet,其上有几个CPropertyPage,每个属性页上有个CListCtrl,供用户查看信息。由于CListCtrl中的信息每隔...
  • qing666888
  • qing666888
  • 2014年09月16日 23:39
  • 666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CListBox支持水平滚动条
举报原因:
原因补充:

(最多只允许输入30个字)