2013-04-17 85 views
1

所以我有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并将其设置为删除当前文本并重新绘制新文本,但是我再次尝试它就像它已经做的那样,在一个毫秒内消失。 感谢您的帮助:)

回答

0

你需要做的是告诉编辑控件滚动到底部,并让它更新滚动条。只是改变滚动条的外观不会让文本进入视图。

看看EM_SCROLLEM_SCROLLCARET等消息。或者,也许只需发送编辑控制WM_VSCROLL消息SB_BOTTOM。然后编辑控件将找出如何更新滚动条。

+0

那么没有工作。第二个焦点是滚动条上升的不同子元素。它只有在焦点位于窗口的滚动条上时才会下降。这就是滚动条本身。该窗口的内容不chage,它不重绘。 – LifePhilPsyPro