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 へのメッセージですが、何が起こるかというと、1 ミリ秒の間ダウンし、すぐに元に戻ります。なぜそれが起こるのだろうか。つまり、どのメッセージまたはデフォルト アクションがスクロール バーを上昇させるのかということです。また、スクロールバーをクリックせずにテキストを再描画するにはどうすればよいですか? ScrollWindowEx(window,0,400,&rc,NULL,NULL,&rc2,SW_SCROLLCHILDREN); のようなものを試しました。しかし、それは失敗します... 古いテキストの上にテキストを再描画し、1ミリ秒後に消えます..私の唯一のアイデアは、別のScrollWindowExを追加して、現在のテキストを消去して新しいテキストを再描画するように設定することですが、すでにミリ秒で消えるだけですします。事前に助けてくれてありがとう:)

4

1 に答える 1

0

必要なことは、エディット コントロールに一番下までスクロールするように指示し、スクロール バーを更新させることです。スクロール バーの外観を変更するだけでは、テキストが表示されません。

EM_SCROLLやのようなメッセージを見てくださいEM_SCROLLCARET。または、エディット コントロールにWM_VSCROLLメッセージを送信するだけSB_BOTTOMです。エディット コントロールは、スクロール バーを更新する方法を見つけます。

于 2013-04-17T15:44:38.443 に答える