2

Win764ビットで実行されているVS2008の空のWin32コンソールアプリに基づいてプログラムを作成しました。プログラムは完全にメニューベースのスポーンでmain.cppあり、ユーザーのニーズに基づいて他のインターフェイス(レジ、在庫、レポートなど)につながる外部関数のみを呼び出します。私がやりたいのは、インターフェイスごとに新しいコンソールウィンドウを提供することです。

理想的には、ユーザーが必要に応じてメインメニューを再度開くなど、機能を進めながら、他のインターフェイスを呼び出したときにメインメニューを閉じるなどです。

このようにするための基礎は、来週、C ++を使用してOOPを深く掘り下げて新しい学期を開始することです。テキストを確認し、トピックを進めていくキャップストーンプロジェクトを完了して、すべての基本を確実に理解したいと思いました。ダウンパット。私がこれを最も賢く、最も簡単な方法でやりたいと思う限り、本に示されている限られた知識に固執するのが最善STLですboost

もちろん、私はSOや他の場所で解決策を探してきました。私は答えを見つけました。それらのほとんどは私の厳しい要件の範囲外であり、コンソールウィンドウを最初から構築することを扱っているものもあります。from-scratchが最も有望であるように見えますが、VSのような堅牢なIDEを使用していないものを扱っているようで、それが価値以上の競合を引き起こすのか、それとも複数で使用できるのかはわかりません。しかし、大多数はそれが不可能であるという印象を私に残しました。これに対する1つの例外は、コンソールをプロセスにリンクすることでした。これが私の将来の希望です!

私をこれに導いたのは、イベントの各ターンをきれいに見る必要があるということでした。最初は、次のような基本的な機能で画面をクリアしようとして浮気していましたvoid clearScreen(int lines);しかし、これは常に下からクリアされます。したがって、次のインターフェイスの前に画面をクリアしても、画面はまだ下部にあります。クリアしてから入力を受け入れると、プロンプトはまだ下部にあります。

これまで明確になっていない場合に備えて。私の質問は
、プロセスに関連付けられた複数のコンソールウィンドウを作成することは可能ですか、それともメインコンソールウィンドウのスクロールを操作するための簡単な方法がありますか?
従来の学習のベビーステッププロセスの範囲内にとどまる必要がありますが、アプリの種類を切り替える以外の入力を聞きたいと思います。

これは、タスクの要件というよりもOCDの問題であるため、努力する価値がない場合でも、それは問題ありません。

4

4 に答える 4

4

コンソールウィンドウ内でカーソルを移動するポータブルな方法はありません。Unix/Linuxでは、そのためのターミナルコードを送信できますが、Windowsではわかりません。

クロスプラットフォームで動作するものの、非常に遅く、あまり良くないものは、次のようになります。

  • 入力した文字を1文字ずつ読みます
  • 画面上のどこに次の文字が表示されるかを覚えておいてください
  • キーを押すたびに画面全体を再描画します

より良くしたい場合は、プラットフォーム固有のソリューションに目を向けるか、それを実行するライブラリ(Unixの世界のncursesなど)を見つける必要がありますが、これらのいずれかが要件に適合するかどうかはわかりません。

于 2012-08-21T09:13:45.363 に答える
3

SetConsoleCursorPositionを使用して、Windowsのカーソル位置を設定できます。

于 2012-08-21T09:17:41.427 に答える
1

VSについて何か言っていたので、Windowsに制限することは問題ではないと思います。その場合は、このためにWindowsAPIを使用できます

それ以外は、ncursesは少なくとも部分的に最も一般的なプラットフォームに移植されているようです。

標準のC++でこれを行う方法を探していた場合、それは存在しません。C ++は、コンソールを備えているために実行中のプラットフォームを必要としないため、コンソール操作機能はありません。

どちらもそれほど使いにくいものではありませんが、これが本当に役立つことを学ぶことを期待している学生のことである場合は、おそらく気にする必要はありません。コンソールの操作は、頻繁に行うことややりたいことではありません。

于 2012-08-21T10:05:37.517 に答える
1

元の質問では明確ではなかったかもしれませんが、コンソールウィンドウで使用するソリューションを探していました。私が学校向けに作成するプログラムはそれぞれでコンパイルする必要があるため、理想的には、ソリューションは少なくともLinuxとWindowsで動作可能でした。これは課題ではありませんでしたが、そこでも使えることを学ぶことは明らかに有利です。

これが私が見つけたものです

...ティムウェイのおかげで解決策

void clearScreen()
{
    #ifdef _WIN32
        system("cls");
    #else
        system("clear");
    #endif
}

これは、単純なことですが、まさに私が探していたものでした。この関数は画面をクリアし、コンソールウィンドウの上部にカーソルを置き、データテーブルの変更に静的ヘッダーまたはタイトルを提供する方法を提供します。また、単純なテキストベースのアニメーションも可能です-そのようなものが好きなら。今学期のコンソールアプリケーションでは、外観、感触、一貫性に大きな違いがありました。

于 2013-01-06T02:22:12.943 に答える