gpt4 book ai didi

winapi - Win32 API : How to scroll down automatically a text inside EDIT control?

转载 作者:行者123 更新时间:2023-12-02 06:52:51 25 4
gpt4 key购买 nike

我有一个像这样创建的 EDIT 控件:

hwndEDIT_5 = CreateWindowEx (
0, "EDIT", NULL,
WS_VSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_READONLY,
135, 450, 555, 200,
h2, ( HMENU ) ID_EDIT_CONSOLE,
h1, NULL
);

如您所见,它是一个只读编辑区域,可以显示多行文本。它应该是一个控制台,我可以在用户使用该程序时为他们显示一些信息。我希望每当添加新行(或给用户的消息)时,文本区域都会自动滚动到最底部的条目(最新的条目)。我已经实现了这个:

 SetDlgItemText ( h2, ID_EDIT_CONSOLE, ch_s );
SCROLLINFO scr;
SCROLLINFO * scr_p = &scr;
scr.cbSize = sizeof ( SCROLLINFO );
scr.fMask = SIF_RANGE;
GetScrollInfo ( GetDlgItem ( h2, ID_EDIT_CONSOLE), SB_VERT, scr_p );
int mmax = scr.nMax;
scr.fMask = SIF_POS;
scr.nPos = mmax;
SetScrollInfo ( GetDlgItem ( h2, ID_EDIT_CONSOLE), SB_VERT, scr_p, TRUE );

该代码在添加新消息后将垂直滚动条滚动到编辑控件的末尾,效果很好,滚动条滚动但文本仍然从头开始可见 - 添加后它回滚到开头,而滚动条回滚到底端。如何正确制作?

最后但并非最不重要的 - 这可能很重要 - 为了首先显示消息,我使用以下方法捕获已显示的文本: GetDlgItemText ( h2, ID_EDIT_CONSOLE, buf, len + 1 );然后我将 buf 转换为字符串,并向该字符串添加我想要显示的新消息。然后我将其转换回 char 数组并使用 SetDlgItemText 进行设置。我使用\r\n 分隔行。我之所以这样编码,是因为我不知道如何以与使用 SetDlgItemText 不同的方式向 EDIT 控件添加一行。而且它仅添加一个条目 AFAIK - 如果使用两次,我将不会在 EDIT 控件中添加两个条目,但第一个条目将被第二个函数调用替换。

最佳答案

不要使用SetScrollInfo。将 SendMessage()EM_LINESCROLL 一起使用消息,将消息发送到编辑控件的窗口句柄。

SendMessage(MemoHwnd, EM_LINESCROLL, 0, NumLinesToScroll);

文档说:

The control does not scroll vertically past the last line of text in the edit control. If the current line plus the number of lines specified by the lParam parameter exceeds the total number of lines in the edit control, the value is adjusted so that the last line of the edit control is scrolled to the top of the edit-control window.

关于winapi - Win32 API : How to scroll down automatically a text inside EDIT control?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com