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

ricesoft 2002-01-07 12:31:25
在ClistBox中,默认的是垂直滚动。那么怎么样才能实现水平滚动?以达到像打开文件对话框一样的效果? 请讲一下解决思路?或提供一个类似的源代码?谢谢
...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ricesoft 2002-01-07
  • 打赏
  • 举报
回复
谢谢回答。
Sorry,刚才没讲清楚。我要达到的效果是:不是将所有的ListBox中Item垂直排列下来,而是在一个窗口中显示好几列的项,然后可以通过水平滚动条来到达更多的列。
这里水平滚动条的作用不是显示某一项由于太长而显示不出来的部分。
突击召唤师 2002-01-07
  • 打赏
  • 举报
回复
还有,文件对话框不是listbox而是listctrl
突击召唤师 2002-01-07
  • 打赏
  • 举报
回复
listbox有水平滚动、竖直滚动、多列风格,选择水平滚动和多列,不要竖直滚动就好了。
真糨糊 2002-01-07
  • 打赏
  • 举报
回复
自己建一个基于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);
}
ricesoft 2002-01-07
  • 打赏
  • 举报
回复
知道这么做了
ricesoft 2002-01-07
  • 打赏
  • 举报
回复
我的CMyListBox是Owner Draw,改写了Drawitam()函数,所以当选择了水平滚动和多列后,还是不能显示水平滚动!!!
Help

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧