簡體   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