【问题标题】:How to align output to center of screen - C++?如何将输出对齐到屏幕中心 - C++?
【发布时间】:2013-06-07 09:10:10
【问题描述】:

我正在开发一个 C++ 控制台应用程序。我想在应用程序窗口屏幕的中心(水平+垂直)执行和打印所有内容,如下所示。

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

如上所述,我想运行我的整个程序。有什么办法吗?任何帮助或建议将不胜感激。

【问题讨论】:

  • 你试过什么?你在用iostreams吗?该区域的宽度是完全固定的,还是用户终端的宽度?
  • @nouney 操作系统是 Windows
  • @BoBTFish 我正在使用 iostreams 应用程序窗口的宽度不固定。它将是用户拥有终端的任何宽度......
  • @AshutoshGangwar:看看这篇文章,所以:ncurses-like for windows

标签: c++ windows formatting console-application


【解决方案1】:

这个怎么样(LIVE EXAMPLE):

#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;
}

你明白了。当输出垂直居中时,您只需将填充结束线放在控制台顶部。

【讨论】:

    【解决方案2】:

    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;
    }
    

    【讨论】:

      【解决方案3】:

      如果您想将应用程序保留在控制台中,但又想做一些布局,我建议您使用ncurses,因为它可以让您更好地控制打印位置,还可以创建菜单、消息盒子和其他类似 GUI 的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        • 1970-01-01
        • 2015-03-17
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        相关资源
        最近更新 更多