我们知道,MFC中的水平滚动条并不像垂直滚动条那样的智能。当文字超出ListBox的宽度时,水平滚动条并不会自己出现,我们需要手动的调用CListBox中的函数SetHorizontalExtent设置宽度,单位为像素。 我们可以自己添加智能水平滚动条,现在我们首先随便创建一个ListBox控件,并将它的HorizontalScrollbar属性设置为True,如下:
这样,控件的创建就完成了,然后就需要添加代码来实现智能水平滚动条了。 首先,我们创建一个类,这里,我命名为CIHListBox,该类需要继承CListBox类,以便添加水平滚动条。 然后我们需要覆盖CListBox类的AddString和InsertString接口以便添加水平滚动条。 最后自然就是我们主要的计算智能水平滚动条的方法了,这里命名为RefushHorizontalScrollBar。 整个类的声明如下: #ifndef _IHLISTBOX_H_ class CIHListBox: public CListBox // 覆盖该方法以便添加水平滚动条 // 计算水平滚动条宽度 #endif 首先,AddString和InsertString没有什么悬念,就是调用基类的方法后重新计算下水平滚动条的宽度,代码如下: int CIHListBox::AddString( LPCTSTR lpszItem ) RefushHorizontalScrollBar(); return nResult; int CIHListBox::InsertString( int nIndex, LPCTSTR lpszItem ) RefushHorizontalScrollBar(); return nResult; 然后就是RefushHorizontalScrollBar方法了,该方法的实质是计算ListBox中每项的宽度,然后将最大宽度设置为水平宽度。实现代码如下: void CIHListBox::RefushHorizontalScrollBar( void ) int nCount = this->GetCount(); int nMaxExtent = 0; this->SetHorizontalExtent( nMaxExtent ); 然后,我们在获取ListBox控件的时候,只需要使用子类的方法就可以实现智能水平滚动条了。 我的尝试代码如下: #define DLG_LIST_TEST ((CIHListBox*)(GetDlgItem(IDC_LISTTEST))) DLG_LIST_TEST->AddString( TEXT("This is lenth tes") ); 结果如下:
以上仅供大家参考,谢谢大家^-^!~ |
为MFC中的ListBox添加水平滚动条
最新推荐文章于 2023-01-20 17:16:22 发布
为MFC中的ListBox添加水平滚动条