如何使编辑框的滚动条滚动到指定位置

时间:2021-09-26 17:59:29
如何使编辑框的滚动条滚动到指定位置

在编辑框写入信息后,滚动条可以自动向下滚动一行
最好有个例子

5 个解决方案

#1


SetCurSel

#2


能给个例子吗????
不会用,找不到这些函数!!

可不可以给个例子?

#3


mark

#4


这是一种比较旧的方法(据说),不过我一直用。
hED是你的Edit控件的handle


POINT pt;
RECT rect;
GetScrollRange(hED,SB_VERT,(LPINT)&pt.x,(LPINT)&pt.y);
pt.x = 0;
GetWindowRect(hED,&rect);
pt.y = pt.y - rect.bottom + rect.top;
SendMessage(hED,EM_SETSCROLLPOS,NULL,(LPARAM)&pt);

#5


非常感谢,终于可以实现了
以下几种方法都在vc++.net下实现,但是在使用EM_SETSCROLLPOS和EM_SETSEL的方法没有效果,如有大侠知道其中原因,还请告知
我实现的方法如下:
1)垂直滚动到底端
POINT pt;
//取得滚动范围
GetDlgItem(IDC_EDIT1)->GetScrollRange(SB_VERT, (LPINT)&pt.x, (LPINT)&pt.y);
pt.x = 0;
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL ,pt.x, pt.y);
2)同上
POINT pt;
RECT rect;
//取得编辑框的位置
GetDlgItem(IDC_EDIT1)->GetWindowRect(&rect);
pt.y = rect.bottom;
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL , pt.x, pt.y);
3)同上
POINT pt;
//取得滚动范围
GetDlgItem(IDC_EDIT1)->GetScrollRange(SB_VERT, (LPINT)&pt.x,(LPINT)&pt.y);
pt.x = 0;
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL , pt.x, pt.y);
3)同上
//第一个参数表示列值,第二个参数表示行值(EM_GETLINECOUNT表示编辑框的行数)
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL , 0, EM_GETLINECOUNT);
4)滚动一行
GetDlgItem(IDC_EDIT1)->SendMessage(WM_VSCROLL, SB_LINEDOWN, 0);
4)滚动一行或一页
GetDlgItem(IDC_EDIT1)->SendMessage(EM_SCROLL, SB_LINEDOWN, 0);
GetDlgItem(IDC_EDIT1)->SendMessage(EM_SCROLL, SB_PAGEDOWN, 0);

#1


SetCurSel

#2


能给个例子吗????
不会用,找不到这些函数!!

可不可以给个例子?

#3


mark

#4


这是一种比较旧的方法(据说),不过我一直用。
hED是你的Edit控件的handle


POINT pt;
RECT rect;
GetScrollRange(hED,SB_VERT,(LPINT)&pt.x,(LPINT)&pt.y);
pt.x = 0;
GetWindowRect(hED,&rect);
pt.y = pt.y - rect.bottom + rect.top;
SendMessage(hED,EM_SETSCROLLPOS,NULL,(LPARAM)&pt);

#5


非常感谢,终于可以实现了
以下几种方法都在vc++.net下实现,但是在使用EM_SETSCROLLPOS和EM_SETSEL的方法没有效果,如有大侠知道其中原因,还请告知
我实现的方法如下:
1)垂直滚动到底端
POINT pt;
//取得滚动范围
GetDlgItem(IDC_EDIT1)->GetScrollRange(SB_VERT, (LPINT)&pt.x, (LPINT)&pt.y);
pt.x = 0;
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL ,pt.x, pt.y);
2)同上
POINT pt;
RECT rect;
//取得编辑框的位置
GetDlgItem(IDC_EDIT1)->GetWindowRect(&rect);
pt.y = rect.bottom;
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL , pt.x, pt.y);
3)同上
POINT pt;
//取得滚动范围
GetDlgItem(IDC_EDIT1)->GetScrollRange(SB_VERT, (LPINT)&pt.x,(LPINT)&pt.y);
pt.x = 0;
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL , pt.x, pt.y);
3)同上
//第一个参数表示列值,第二个参数表示行值(EM_GETLINECOUNT表示编辑框的行数)
GetDlgItem(IDC_EDIT1)->SendMessage(EM_LINESCROLL , 0, EM_GETLINECOUNT);
4)滚动一行
GetDlgItem(IDC_EDIT1)->SendMessage(WM_VSCROLL, SB_LINEDOWN, 0);
4)滚动一行或一页
GetDlgItem(IDC_EDIT1)->SendMessage(EM_SCROLL, SB_LINEDOWN, 0);
GetDlgItem(IDC_EDIT1)->SendMessage(EM_SCROLL, SB_PAGEDOWN, 0);