CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

Help,在ListBox中如何实现水平滚动,而不要垂直滚动?

楼主ricesoft(分吹鸡蛋壳,财去人安乐!)2002-01-07 12:31:25 在 VC/MFC / 基础类 提问

在ClistBox中,默认的是垂直滚动。那么怎么样才能实现水平滚动?以达到像打开文件对话框一样的效果?   请讲一下解决思路?或提供一个类似的源代码?谢谢   问题点数:20、回复次数:6Top

1 楼njg_jh(糨糊)回复于 2002-01-07 12:34:55 得分 10

自己建一个基于ClistBox的类CMyListBox:  
  int   CMyListBox::AddString(LPCTSTR   lpszItem)  
  {  
  int   ret=CListBox::AddString(lpszItem);  
          m_nMaxWidth=0;  
          SCROLLINFO   fo;  
          memset(&fo,0,sizeof(fo));  
  GetScrollInfo(SB_VERT,&fo);  
  if(GetCount()>1&&fo.nMax>fo.nPage)    
  m_nMaxWidth=GetSystemMetrics(SM_CXVSCROLL);  
  CFont   *font=GetFont();  
          CClientDC   dc(this);  
  CFont   *old=dc.SelectObject(font);  
  CSize   size;  
  GetTextExtentPoint32(dc.m_hDC,lpszItem,strlen(lpszItem),&size);  
  SetHorizontalExtent(size.cx+m_nMaxWidth+3);  
  dc.SelectObject(old);  
  return   ret;  
  }  
   
  int   CMyListBox::DeleteString(UINT   nIndex)  
  {  
  RECT   lRect;  
  GetWindowRect(&lRect);  
   
  int   nRet   =   CListBox::DeleteString(nIndex);  
   
  int   nBoxWidth   =   lRect.right   -   lRect.left;  
  m_nMaxWidth   =   nBoxWidth;  
   
  SIZE   sSize;  
  CClientDC   myDC(this);  
   
  int   i;  
  char   szEntry[257];  
   
  for   (i   =   0;   i   <GetCount();   i++)    
  {    
  GetText(i,   szEntry);    
  GetTextExtentPoint32(myDC.m_hDC,   szEntry,   strlen(szEntry),   &sSize);  
  m_nMaxWidth=max(m_nMaxWidth,   (int)sSize.cx);    
  }    
  if   (m_nMaxWidth>   nBoxWidth)   //   显示水平滚动条  
  {  
  ShowScrollBar(SB_HORZ,   TRUE);  
  SetHorizontalExtent(m_nMaxWidth);  
  }            
  else    
  {  
  ShowScrollBar(SB_HORZ,   FALSE);  
  }  
  return   nRet;  
  }  
   
  void   CMyListBox::ResetContent()  
  {  
  CListBox::ResetContent();  
   
  m_nMaxWidth   =   0;  
  SetHorizontalExtent(0);  
  }Top

2 楼tony1978(突击召唤师)回复于 2002-01-07 12:45:14 得分 10

listbox有水平滚动、竖直滚动、多列风格,选择水平滚动和多列,不要竖直滚动就好了。  
  Top

3 楼tony1978(突击召唤师)回复于 2002-01-07 12:45:47 得分 0

还有,文件对话框不是listbox而是listctrlTop

4 楼ricesoft(分吹鸡蛋壳,财去人安乐!)回复于 2002-01-07 12:51:36 得分 0

谢谢回答。  
  Sorry,刚才没讲清楚。我要达到的效果是:不是将所有的ListBox中Item垂直排列下来,而是在一个窗口中显示好几列的项,然后可以通过水平滚动条来到达更多的列。  
  这里水平滚动条的作用不是显示某一项由于太长而显示不出来的部分。  
  Top

5 楼ricesoft(分吹鸡蛋壳,财去人安乐!)回复于 2002-01-07 13:22:08 得分 0

我的CMyListBox是Owner   Draw,改写了Drawitam()函数,所以当选择了水平滚动和多列后,还是不能显示水平滚动!!!  
  HelpTop

6 楼ricesoft(分吹鸡蛋壳,财去人安乐!)回复于 2002-01-07 13:25:46 得分 0

知道这么做了Top

相关问题

  • 如何将ListBox的水平、垂直滚动条一直显示出来
  • 如何使CTreeCtrl能垂直滚动,但不能水平滚动?
  • 如何给listbox回水平滚动条??
  • listbox增加水平滚动条
  • 怎么让listbox有水平滚动条?
  • 如何给listbox加水平滚动条?
  • listbox 水平方向上的滚动条
  • 如何让ListBox水平滚动
  • 怎么实现只有垂直滚动条,没有水平滚动条
  • ListView能不能隐藏水平滚动条而只显示垂直滚动条?

关键词

  • dc
  • nmaxwidth
  • cmylistbox
  • 滚动
  • 水平滚动
  • clistbox
  • nboxwidth
  • lrect
  • lpszitem
  • listbox

得分解答快速导航

  • 帖主:ricesoft
  • njg_jh
  • tony1978

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo