-2

画面に情報を表示するプログラムを作成していますが、それらを毎秒更新したいと考えています。

私は何をすべきか?

Windows で C コンソール アプリケーションを作成しています。

4

4 に答える 4

2

ピアニスト、WinAPI関数を使用してコンソールを操作できます。

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (!hConsole)
    return;

その後、カーソル位置を決定します。

CONSOLE_SCREEN_BUFFER_INFO csbi = {0};
GetConsoleScreenBufferInfo(hConsole, &csbi);
COORD coordCur = csbi.dwCursorPosition;

と...

while (TRUE) {  // your cycle goes here
    // ...
    // now you can change position of the cursor
    coordCur.X = newX;
    coordCur.Y = newY;
    SetConsoleCursorPosition(hConsole, coordCur);
    // and print any information from the new position
    printf("..."); // old text will be replaced
}

したがって、小さなテキストを変更する場合は、すべてのコンソールをクリアして更新する必要はありません。

ps。ハンドルを離すことを忘れないでください:

CloseHandle(hConsole);
于 2012-10-31T22:57:30.110 に答える
0

質問する前に Google を検索していれば、最初の結果でこのリンクを見つけることができたはずです。

メソッドの1つを引用するには:

ウィンドウズ:

#include <windows.h>

void ClearScreen()
  {
  HANDLE                     hStdOut;
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  DWORD                      count;
  DWORD                      cellCount;
  COORD                      homeCoords = { 0, 0 };

  hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
  if (hStdOut == INVALID_HANDLE_VALUE) return;

  /* Get the number of cells in the current buffer */
  if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
  cellCount = csbi.dwSize.X *csbi.dwSize.Y;

  /* Fill the entire buffer with spaces */
  if (!FillConsoleOutputCharacter(
    hStdOut,
    (TCHAR) ' ',
    cellCount,
    homeCoords,
    &count
    )) return;

  /* Fill the entire buffer with the current colors and attributes */
  if (!FillConsoleOutputAttribute(
    hStdOut,
    csbi.wAttributes,
    cellCount,
    homeCoords,
    &count
    )) return;

  /* Move the cursor home */
  SetConsoleCursorPosition( hStdOut, homeCoords );
  }
于 2012-05-16T08:55:37.147 に答える