繁体   English   中英

设置滚动条时遇到麻烦

[英]Have trouble with setting a scroll bar

因此,我有2个子类别的窗口,每个编辑控件都有自己的样式...由于需要聊天程序,因此我需要顶部窗口来容纳滚动条,一旦文本超过37行,此窗口中没有更多空间。 因此,通过添加滚动条,可以节省额外的空间。 现在,我要尝试的是将其默认设置为窗口底部,以显示最后写入的消息。 目前,它“卡在”上面。 我试图做的是:

RECT    rc,rc2;
GetClientRect(window, &rc);
info.cbSize = sizeof(SCROLLINFO);
info.fMask = SIF_ALL|SIF_DISABLENOSCROLL;
info.nMax = lines;
info.nMin = 0;
info.nPage = 37;

当焦点设置在该窗口(WM_SETFOCUS)上时,我这样做:

case WM_SETFOCUS:
{
     SetScrollInfo(window, SB_VERT, &info, TRUE);
            if( lines > 37 ){
                SetScrollPos(window,SB_VERT,400,TRUE);
            }
            else if( lines < 37){
                SetScrollPos(window,SB_VERT,0,TRUE);
            }
            ShowScrollBar(window,SB_VERT,1);
        return 0;
            }

因此,当我在下面的窗口(另一个孩子)中键入内容时,我将滚动条放在顶部。 当我单击正在谈论的窗口时,他的滚动条会下拉,但文本不会重绘。 当我单击滚动条开始抄写时,它会立即重绘文本。 为了解决该问题,当我在下部窗口中键入内容时,我从下部儿童向上部儿童发送了一条消息。 一条发送给WM_SETFOCUS的消息,该消息执行将滚动条置于底部的代码,但是发生的是...。 我不知道为什么会这样。 我的意思是什么消息或默认操作导致滚动条上升。 另外我怎么能重画文本而无需单击滚动条? 我试过类似ScrollWindowEx(window,0,400,&rc,NULL,NULL,&rc2,SW_SCROLLCHILDREN); 但这失败了...它会在旧文本上重绘文本,并在一毫秒后消失。.我唯一的想法是添加另一个ScrollWindowEx并将其设置为擦除当前文本并重绘新文本,但是我再次说,它将消失只需一毫秒即可完成。 我在这里先向您的帮助表示感谢 :)

您需要做的是告诉编辑控件滚动到底部,并让它更新滚动条。 仅仅改变滚动条的外观并不能使文本可见。

看一下EM_SCROLLEM_SCROLLCARET类的消息。 或者,也许只是通过SB_BOTTOM向编辑控件发送WM_VSCROLL消息。 然后,编辑控件将弄清楚如何更新滚动条。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM