为MFC中的ListBox添加水平滚动条
我们知道,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") );
结果如下:
以上仅供大家参考,谢谢大家^-^!~
为MFC中的ListBox添加水平滚动条的更多相关文章
- 为TListBox添加水平滚动条
		
为TListBox添加水平滚动条 实例说明 TListBox组件是一个较为常用的列表组件,在默认情况下该组件是没有水平滚动条的,所以文字过长会显示不完全,在文字较短的情况下还可以,但是如果一行的文字很 ...
 - VB   ListBox 添加横向滚动条
		
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal h ...
 - MFC 控件编程之水平滚动条跟垂直滚动条
		
MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...
 - MFC中关于CListBox控件添加水平滚动条
		
首先是设置listbox控件的属性 Horizontal Scroll设为TRUE: 然后添加函数到CUighurRecognitionDlg.cpp(在CUighurRecognitionDlg. ...
 - java中JScrollPane不显示水平滚动条的解决办法
		
在JPanel中添加了表格,表格中对东西太多,需要水平滚动条滑动才能够完全找到所有数据,如果没有水平滚动条的话,数据堆积在一起,无法分开 做法是: 第一步:先将表格自动调整的状态给关闭掉:table. ...
 - EasyUI combobox下拉框添加水平滚动条和垂直滚动条
		
在EasyUI中combobox组件设置滚动条: 1.垂直滚动条:设置panelHeight属性,默认200,组件的数据过多滚动条自动出现,设置auto,则不出现滚动条. 2.水平滚动条:水平滚动条在 ...
 - 向table添加水平滚动条
		
转自:http://www.cnblogs.com/linjiqin/p/3148225.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...
 - 怎么给easyui中的datagrid加水平滚动条
		
注意如下几个点就行: 1.数据网格(DataGrid)所在的table属性上级div无需设置width: 2..datagrid属性:fitColumns为false 或者不填 3.在style中给. ...
 - (七)对话框,单选框(radiobox),复选框(checkbox),列表框(ListBox),组合框(CComboBox),水平滚动条(Horizontal scroll bar),微调(旋转)spincontrol,列表视图控件CListCtrl,静态控件static
		
1,模态对话框和非模态对话框 // 模态对话框 void CMainFrame::OnDialogExec() { // TODO: 在此添加命令处理程序代码 // 创建对话框对象 CDialog d ...
 
随机推荐
- CSS基础知识解析
			
一.基础知识 1.1 CSS组成 css 样式由选择符和声明组成,而声明又由属性和值组成,如下图所示: 选择符:又称选择器,指明网页中要应用样式规则的元素,如本例中是网页中所有的段(p)的文字将变成蓝 ...
 - Spark调研笔记第4篇 - PySpark Internals
			
事实上.有两个名为PySpark的概念.一个是指Sparkclient内置的pyspark脚本.而还有一个是指Spark Python API中的名为pyspark的package. 本文仅仅对第1个 ...
 - js:对象的创建(为prototype做铺垫)
			
/** *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一 *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题. ...
 - appium+python自动化52-多点触控MultiAction
			
前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...
 - thinkphp输出表格
			
//这是打印5列n行的表格,所以mod="5" value="4" <tr> <volist name="data" id ...
 - cas 获取session中的用户信息
			
<%Object object =request.getSession().getAttribute("_const_cas_assertion_");Assertion a ...
 - 一次SQL查询语句的优化
			
1.项目中之前的"我关注的拍品列表"需要添加筛选功能,因为目前显示的关注的拍品太多没有进行分类,用户体验差. 2.添加筛选条件之后,可以筛选出“未开始”“进行中”“已结束”三种情况 ...
 - 数学图形(2.23)Cylindric sine wave柱面正弦曲线
			
柱面正弦曲线 #http://www.mathcurve.com/courbes3d/couronnetangentoidale/couronnetangentoidale.shtml vertice ...
 - go语言基础之工程管理和工作区介绍
			
1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...
 - VC++多线程--进程间通信
			
1.邮槽 邮槽是windows系统提供的一种单向通信的机制,邮槽能传输的数据非常小,一般在400k左右. 创建邮槽 HANDLE CreateMailslot( LPCTSTR lpName, //指 ...