我的view基类是CScrollView,
我使用TextOut将文本输出到视图上
我想根据
文本的长度、行数和当前窗口的大小关系
来动态使用滚动条我已经实现了垂直滚动条代码如下:
         CSize docSize(100,(pDoc->iRow)*height);
CRect rect;
GetClientRect(&rect);
CSize pageSize(rect.right,rect.bottom);
CSize lineSize(0,height);
SetScrollSizes(MM_TEXT,docSize,pageSize,lineSize);但是水平滚动条搞了几天还没有实现我OnDraw代码如下
void CmyView::OnDraw(CDC* pDC)
{
CmyDoc* pDoc = GetDocument();

int iPosition = 0;

TEXTMETRIC tm;
GetDC()->GetTextMetrics(&tm);
LONG height = tm.tmHeight;

char szDataStr[1024]=""; for (int i=0;i<pDoc->iRow;++i)
{
wsprintf(szDataStr,"%d# [接收时间:%s] [发送方IP:%s]:  %s",i+1,pDoc->timelist.GetAt(i),pDoc->addresslist.GetAt(i),pDoc->datalist.GetAt(i));
pDC->TextOut(0,iPosition,szDataStr);
iPosition +=height;
}
CSize docSize(100,(pDoc->iRow)*height);
CRect rect;
GetClientRect(&rect);
CSize pageSize(50,rect.bottom);
CSize lineSize(10,height);
SetScrollSizes(MM_TEXT,docSize,pageSize,lineSize);
}

解决方案 »

  1.   

    用SetScrollRange()函数,如果想对应文本的行数就,把range的最大值设置为行数就可以了,要动态的使用就先计算窗口大小,然后计算窗口内可以显示多少行文本,窗口大小,文本高度都有相应的函数可以得到,然后根据这些来设置显示就可以了
      

  2.   

    就是无法出现
    水平滚动条垂直滚动条可以动态出现了
    szDataStr是我显示在客户区的数据长度
    pDoc->iRow是数据条数我需要根据每条数据的长度来动态显示水平滚动条(怎么搞都出不来,崩溃了)
    数据的条数来动态显示垂直滚动条(已经可以了)
             CSize docSize(strlen(szDataStr),(pDoc->iRow)*height);
    CRect rect;
    GetClientRect(&rect);
    CSize pageSize(rect.right,rect.bottom);//客户区的宽度和高度
    CSize lineSize(width,height);
    SetScrollSizes(MM_TEXT,docSize,pageSize,lineSize);
      

  3.   

    strlen(szDataStr)只是字符串的长度,并不是显示的宽度。
    用GetTextExtentEx()得到字符串的宽度。