丹阳市制作网站,威海网络公司,为wordpress移动端,介绍湖北的网页制作我们知道#xff0c;MFC中的水平滚动条并不像垂直滚动条那样的智能。当文字超出ListBox的宽度时#xff0c;水平滚动条并不会自己出现#xff0c;我们需要手动的调用CListBox中的函数SetHorizontalExtent设置宽度#xff0c;单位为像素。 我们可以自己添加智能水平滚动条MFC中的水平滚动条并不像垂直滚动条那样的智能。当文字超出ListBox的宽度时水平滚动条并不会自己出现我们需要手动的调用CListBox中的函数SetHorizontalExtent设置宽度单位为像素。 我们可以自己添加智能水平滚动条现在我们首先随便创建一个ListBox控件并将它的HorizontalScrollbar属性设置为True如下 这样控件的创建就完成了然后就需要添加代码来实现智能水平滚动条了。 首先我们创建一个类这里我命名为CIHListBox该类需要继承CListBox类以便添加水平滚动条。 然后我们需要覆盖CListBox类的AddString和InsertString接口以便添加水平滚动条。 最后自然就是我们主要的计算智能水平滚动条的方法了这里命名为RefushHorizontalScrollBar。 整个类的声明如下 #ifndef _IHLISTBOX_H_#define _IHLISTBOX_H_ class CIHListBox: public CListBox{public:CIHListBox(void);~CIHListBox(void); // 覆盖该方法以便添加水平滚动条int AddString( LPCTSTR lpszItem );int InsertString( int nIndex, LPCTSTR lpszItem ); // 计算水平滚动条宽度void RefushHorizontalScrollBar( void );}; #endif 首先AddString和InsertString没有什么悬念就是调用基类的方法后重新计算下水平滚动条的宽度代码如下 int CIHListBox::AddString( LPCTSTR lpszItem ){int nResult CListBox::AddString( lpszItem ); RefushHorizontalScrollBar(); return nResult;} int CIHListBox::InsertString( int nIndex, LPCTSTR lpszItem ){int nResult CListBox::InsertString( nIndex, lpszItem ); RefushHorizontalScrollBar(); return nResult;} 然后就是RefushHorizontalScrollBar方法了该方法的实质是计算ListBox中每项的宽度然后将最大宽度设置为水平宽度。实现代码如下 void CIHListBox::RefushHorizontalScrollBar( void ){CDC *pDC this-GetDC();if ( NULL pDC ){ return;} int nCount this-GetCount();if ( nCount 1 ){ this-SetHorizontalExtent( 0 ); return;} int nMaxExtent 0;CString szText;for ( int i 0; i nCount; i ){ this-GetText( i, szText ); CSize cs pDC-GetTextExtent( szText ); if ( cs.cx nMaxExtent ) { nMaxExtent cs.cx; }} this-SetHorizontalExtent( nMaxExtent );} 然后我们在获取ListBox控件的时候只需要使用子类的方法就可以实现智能水平滚动条了。 我的尝试代码如下 #define DLG_LIST_TEST ((CIHListBox*)(GetDlgItem(IDC_LISTTEST))) DLG_LIST_TEST-AddString( TEXT(This is lenth tes) );DLG_LIST_TEST-AddString( TEXT(This is lenth test test test) );DLG_LIST_TEST-AddString( TEXT(This is lenth test test test test test11111) ); 结果如下 以上仅供大家参考谢谢大家^-^~