• ベストアンサー

VC++にて、コンソールを二画面表示

Visual C++ 6.0でコンソールを二画面表示し、片方(コンソール1とします)に入力専用画面、もう片方(コンソール2)に情報を垂れ流しにするアプリを作りたいと思います。どのようにしたら良いのでしょうか。ご教授いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

コンソールアプリケーションは「2画面表示」が出来ませんので、1つの画面を「自前で2分割」しなければなりません。 「自前で2分割」するためには「画面を自前で管理」しなければならないので http://i2lab.net/xp/fwki/index.cgi?page=%A5%A8%A5%B9%A5%B1%A1%BC%A5%D7%A5%B7%A1%BC%A5%B1%A5%F3%A5%B9%C9%BD に記載された「ANSIエスケープシーケンス」を用いて、画面を制御し、表示と入力を行います。 以下のような処理をすれば「仮想的に上下2画面分割」が出来ます。 ・画面は1~12行目を入力用、12~24行目を表示用とする(25行目はファンクションキー表示用に予約されている) ・上画面カーソル位置、下画面カーソル位置を、自前で記録する。 ・入力時は画面の上半分にカーソルを移動し、入力(とエコーバック表示)を行う。 ・入力終了時、改行などでカーソルが13行目になった場合は「ESC [1L ESC M」などで12行目に新しい1行を増やし、カーソルを12行目に置きます。これで「上の画面だけスクロール」する事になります。 ・情報表示時は画面の下半分にカーソルを移動し、1行づつ表示を行います(スクロールが発生してしまうような、大量の表示、改行を含む表示はしないで、表示内容を「1行に収まる長さ」に分割して表示するのが必須となります) ・情報表示時に最終行まで行って「スクロールが必要」になった場合は「ESC s ESC [13;1H ESC [1M ESC u」などで、カーソル位置を保存してから13行目を1行削除してから、カーソル位置を復元します。これで「下の画面だけスクロール」します。 このような「2画面分割」は「ファイルを同時に複数開ける、コンソールタイプのテキストエディタ」で行われています。 例えば、UNIX系のOSでは「Emacs」が、MS-DOS系のOSでは「PC98・DOS/V版VZエディタ」が、画面の上下分割をサポートしています。

shikarus
質問者

お礼

ありがとうございます。 CLRでフォームを二画面開いても、やりたい事が実現できる事が分かったため、そちらで行う事にします。 どうもありがとうございました。

その他の回答 (1)

noname#208124
noname#208124
回答No.1

1つのプロセスは1つのコンソールしか持てないので パイプで渡す入力専用プロセスと渡されたデータを表示するだけのプロセスにしてしまうのが一番楽なやり方だと思います

参考URL:
http://support.microsoft.com/kb/190351/ja,http://msdn.microsoft.com/en-us/library/ms682499.aspx
shikarus
質問者

お礼

この質問を投稿した後に、過去にも同じ質問があった事に気付きました。 上の方のお礼にも書いたのですが、 フォームを二画面開いてもやりたい事が実現できることが分かったのでそちらで行います。ありがとうございました。

関連するQ&A