4

私は C++ コンソール アプリに取り組んでいます。以下に示すように、アプリウィンドウ画面の中央(水平+垂直)にあるすべてのものを実行して印刷したいと思います。

 --------------------------------
|                               |
|                               |
|         User : xyz            |
|         Pass : ****           |
|                               |
|                               |
 --------------------------------

上記で指摘したように、プログラム全体を実行したいと思います。そうする方法はありますか?どんな助けや提案もいただければ幸いです。

4

3 に答える 3

4

これはどうですか(ライブの例):

#include <iostream>
#include <string>
#include <vector>


void centerify_output(std::string str, int num_cols) {
    // Calculate left padding
    int padding_left = (num_cols / 2) - (str.size() / 2);

    // Put padding spaces
    for(int i = 0; i < padding_left; ++i) std::cout << ' ';

    // Print the message
    std::cout << str;
}


int main() {
    std::vector<std::string> lines = {
        "---------------------------------",
        "|                               |",
        "|                               |",
        "|         User : xyz            |",
        "|         Pass : ****           |",
        "|                               |",
        "|                               |",
        "---------------------------------",
    };

    int num_cols = 100;

    // VIRTUAL BORDER
    std::cout << std::endl;
    for(int i = 0; i < num_cols; ++i) std::cout << ' ';
    std::cout << '|' << std::endl;

    // OUTPUT
    for(int i = 0; i < lines.size(); ++i) {
        centerify_output(lines[i], num_cols);
        std::cout << std::endl;
    }

    // VIRTUAL BORDER
    std::cout << std::endl;
    for(int i = 0; i < num_cols; ++i) std::cout << ' ';
    std::cout << '|' << std::endl;
}

あなたはアイデアを得る。出力を垂直方向の中央に配置する場合は、コンソールの上部にパディング終了行を配置するだけです。

于 2013-06-07T09:32:17.823 に答える
3

WIN の例:

#include <windows.h>

int main()
{ 
    HANDLE screen = GetStdHandle( STD_OUTPUT_HANDLE );

    COORD max_size = GetLargestConsoleWindowSize( screen );

    char s[] = "Hello world!";

    COORD pos;
    pos.X = (max_size.X - sizeof(s) ) / 2;
    pos.Y = max_size.Y / 2;
    SetConsoleCursorPosition( screen, pos );

    LPDWORD written;
    WriteConsole( screen, s, sizeof(s), written, 0 );

    return 0;
}
于 2013-06-07T09:24:21.087 に答える
2

アプリケーションをコンソールに保持したいが、いくつかのレイアウトを行いたい場合は、ncursesを使用することをお勧めします。これにより、印刷する場所をより詳細に制御でき、メニュー、メッセージ ボックス、およびその他の GUI を作成する可能性も与えられます。みたいなもの。

于 2013-06-07T09:30:25.640 に答える