スクリーン バッファーのスクロール

重要

このドキュメントでは、エコシステム ロードマップの一部ではなくなったコンソール プラットフォームの機能について説明します。 このコンテンツを新しい製品で使用することはお勧めしませんが、今後も既存の使用をサポートし続けます。 推奨される最新のソリューションでは、クロスプラットフォーム シナリオでの互換性を最大限に高める仮想ターミナル シーケンスに重点を置いています。 この設計決定の詳細については、クラシック コンソールと仮想ターミナルのドキュメントを参照してください。

コンソール ウィンドウには、アクティブなスクリーン バッファーの一部が表示されます。 各スクリーン バッファーはコンソール ウィンドウに表示する左上および右下の文字セルの座標を指定する、独自の現在のウィンドウの四角形を維持します。 スクリーン バッファーの現在のウィンドウの四角形を確認するには、GetConsoleScreenBufferInfo を使用します。 スクリーン バッファーが作成されると、ウィンドウの左上隅はコンソール スクリーン バッファーの左上隅 (0,0) になります。

ウィンドウの四角形は、コンソール スクリーン バッファーのさまざまな部分を表示するように変更できます。 スクリーン バッファーのウィンドウの四角形は、次の状況で変更される可能性があります。

  • 新しいウィンドウ四角形を指定するために SetConsoleWindowInfo が呼び出されると、ウィンドウのサイズを変更せずにウィンドウの四角形の位置を変更することで、コンソール スクリーン バッファーのビューをスクロールします。 ウィンドウの内容をスクロールする例については、「スクリーン バッファーのウィンドウのスクロール」を参照してください。

    screen buffer window panning around large buffer of content

  • WriteFile 関数を使用して、行末 (EOL) 出力モードで折り返しが有効になっているスクリーン バッファーに書き込むと、ウィンドウの四角形が自動的に移動するため、カーソルは常に表示されます。

  • SetConsoleCursorPosition 関数が現在のウィンドウの四角形の境界線の外側にある新しいカーソル位置を指定すると、ウィンドウの四角形が自動的に移動してカーソルが表示されます。

  • ユーザーがコンソール ウィンドウのサイズを変更したり、ウィンドウのスクロール バーを使用したりすると、アクティブなスクリーン バッファーのウィンドウの四角形が変更される可能性があります。 この変更は、入力バッファーのウィンドウのサイズ変更イベントとして報告されません。

このような状況では、ウィンドウの四角形が移動してコンソール スクリーン バッファーの別の部分が表示されますが、コンソール スクリーン バッファーの内容は同じ位置に維持させれます。 次の状況では、コンソール スクリーン バッファーの内容がシフトする可能性があります。

  • ScrollConsoleScreenBuffer 関数が呼び出されると、四角形のブロックがスクリーン バッファーのある部分から別の部分にコピーされます。
  • WriteFile を使用して EOL 出力モードで折り返しが有効になっているスクリーン バッファーに書き込む場合、コンソール スクリーン バッファーの末尾が検出されると、コンソール スクリーン バッファーの内容が自動的にスクロールされます。 このスクロールによりコンソール スクリーン バッファーの一番上の行が破棄されます。

ScrollConsoleScreenBuffer は、移動されるコンソール スクリーン バッファーの四角形と、四角形がコピーされる新しい左上の座標を指定します。 この関数は、コンソール スクリーン バッファーの一部または内容全体をスクロールできます。

この図は、 コンソール スクリーン バッファーの内容全体を複数行上にスクロールする ScrollConsoleScreenBuffer 操作を示しています。 上の行の内容は破棄され、一番下の行には指定した文字と色が記入されます。

screen buffer window scrolling content off top to discard

ScrollConsoleScreenBuffer の効果は、クリッピング四角形の外側にあるコンソール スクリーン バッファーの内容が変更されないように、オプションのクリッピング四角形を指定することによって制限できます。 クリッピングの効果は、コンソール スクリーン バッファーの残りの部分に影響を与えずにコンテンツがスクロールされるサブウィンドウ (クリッピング四角形) を作成することです。 ScrollConsoleScreenBuffer を使用する例については、「スクリーン バッファーのコンテンツのスクロール」を参照してください。