0

リビジョン 1:

WinAPI のAllocConsole();機能がよくわかりません。オプション 1 またはオプション 2 のいずれかが必要です。ただし、両方が必要です:)。前もって感謝します。オプション1は次のとおりです。

BUTTON_1 がクリックされたときに、WinAPI プログラムからコンソール ウィンドウを作成します。コンソールは、テキスト ( など) を出力できる必要がありcout、テキストの印刷をスリープ/遅延させる必要があります。(のようなものSleep()

オプション 2:

オプション 1 のようにテキストをコンソール ウィンドウに出力する代わりに、プログラムはユーザーがアクセスできない編集ボックスにテキストを出力します。Sleep()これは、テキストの印刷を遅らせるようなものを使用できる必要もあります。

4

2 に答える 2

0

おそらく、長いプロセスからのTTYスタイルの出力を記録するために、編集コントロールに文字列を追加していると仮定します。

メッセージを使用しEM_SETSELて最後の文字の直後の範囲を選択し、それを使用EM_REPLACESELして追加する文字列に置き換えます。これが発生すると、編集コントロールがスクロールします。たとえば、ifhEditは編集コントロールのハンドルでありstr、0で終了する文字列を追加します。

int idx=GetWindowTextLength(hEdit);
SendMessage(hEdit,EM_SETSEL,idx,idx);

SendMessage(hEdit,EM_REPLACESEL,0,(LPARAM)str);

これは、このナレッジベースの記事で推奨されているプロセスです:http ://support.microsoft.com/kb/109550

于 2012-12-15T18:24:59.183 に答える
0

私の提案は使用することです

SendMessage(hEditBox,EM_SETSEL,-2,-2);

エディット コントロールのテキストの末尾にキャレットを移動します。1 つの関数呼び出しを節約し、機能します。

スリープ関連の部分については、タイマーを使用した方が良いと思いますが、問題なく動作するはずです。

元。

// somewhere in the code where you decide to make changes to the edit control
...
SetTimer(hWnd,TIMER_ID,1000,0);  // TIMER_ID is arbitrary, the delay is set to 1000 ms
...

// main procedure message 
switch (uMsg) {
   ...
   case WM_TIMER:
      SendMessage(hEditBox,EM_SETSEL,-2,-2);
      SendMessage(hEditBox,EM_REPLACESEL,0,buffer);
      KillTimer(hWnds,TIMER_ID);
   ...
}

たとえば、SetTimer 呼び出しを再利用するなど、これにもう少し作業を加えることができます。

于 2012-12-16T10:37:11.603 に答える