所以我有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并将其设置为删除当前文本并重新绘制新文本,但是我再次尝试它就像它已经做的那样,在一个毫秒内消失。 感谢您的帮助:)
那么没有工作。第二个焦点是滚动条上升的不同子元素。它只有在焦点位于窗口的滚动条上时才会下降。这就是滚动条本身。该窗口的内容不chage,它不重绘。 – LifePhilPsyPro