我正在处理一个C ++控制台应用程序。 我想执行和打印应用程序窗口中心的所有东西(水平+垂直),如下所示。
-------------------------------- | | | | | User : xyz | | Pass : **** | | | | | --------------------------------
我想像上面那样运行我的整个程序。 有没有办法做到这一点? 任何帮助或build议,将不胜感激。
如果你想保持你的应用程序在一个控制台,但想做一些布局,我建议使用ncurses,因为它可以让你更多地控制你的打印位置,也可以创建菜单,消息框和其他GUI-喜欢的东西。
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; }
这个怎么样( 实例 ):
#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; }
你明白了。 当垂直居中输出时,您只需在控制台顶部放置填充末端线。