如何再打开文件后改变滚动条宽度?

hencechen 2008-11-29 10:52:38
在网上查了查,可以通过
pDC->DrawText(str,&rectstr,DT_LEFT |DT_CALCRECT);
pDC->DrawText(str,rectstr,DT_LEFT);
来获取文本的矩形面积。
但是这是在OnDraw函数里。
滚动条的设定是在OnInitialUpdate函数里。

如何去改变滚动条参数?
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hencechen 2008-11-29
  • 打赏
  • 举报
回复

void CTest1View::OnDraw(CDC* pDC)
{
CTest1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->DrawText(str,&rectstr,DT_LEFT |DT_CALCRECT);
pDC->DrawText(str,rectstr,DT_LEFT);
}



void CTest1View::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE);
if(IDOK==dlg.DoModal())
{
CFile file(dlg.GetFileName(),CFile::modeRead);
DWORD len=file.GetLength();
char *pbuf;
pbuf=new char[len];
pbuf[len]=0;
file.Read(pbuf,len);
file.Close();
str=pbuf;
}
//UpdateWindow();
SetScrollRange (SB_VERT,0,rectstr.bottom );
Invalidate();
}
hencechen 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ilovedrv 的回复:]
先算出需要大小 GetTextExtentPoint ,再调用 SetScrollRange ,参数查看msdn
[/Quote]

void CTest1View::OnDraw(CDC* pDC)
{
CTest1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->DrawText(str,&rectstr,DT_LEFT |DT_CALCRECT);
pDC->DrawText(str,rectstr,DT_LEFT);
}

void CTest1View::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE);
if(IDOK==dlg.DoModal())
{
CFile file(dlg.GetFileName(),CFile::modeRead);
DWORD len=file.GetLength();
char *pbuf;
pbuf=new char[len];
pbuf[len]=0;
file.Read(pbuf,len);
file.Close();
str=pbuf;
}
//UpdateWindow();
SetScrollRange (SB_VERT,0,rectstr.bottom );
Invalidate();
}

依然无法实现滚动条改变的功能
hencechen 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ilovedrv 的回复:]
先算出需要大小 GetTextExtentPoint ,再调用 SetScrollRange ,参数查看msdn
[/Quote]
初学MFC。还是有不懂的地方,请问:

BOOL GetTextExtentPoint(
HDC hdc, // handle to DC
LPCTSTR lpString, // text string
int cbString, // number of characters in string
LPSIZE lpSize // string size
);

这不是获取STRING的大小的吗?这里需要知道的是STRING的高度?怎么弄?

BOOL SetScrollRange(
HWND hWnd, // handle to window
int nBar, // scroll bar
int nMinPos, // minimum scrolling position
int nMaxPos, // maximum scrolling position
BOOL bRedraw // redraw flag
);

这里的nBar是滚动条吧?如何获得他的对象呢?
最大位置和最小位置就是滚动条的范围吗?
ilovedrv 2008-11-29
  • 打赏
  • 举报
回复
先算出需要大小 GetTextExtentPoint ,再调用 SetScrollRange ,参数查看msdn

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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