如何将输出对齐到屏幕的中心- c++
How to align output to center of screen - C++?
我正在一个c++控制台应用程序上工作。我想执行和打印所有的东西在应用程序窗口屏幕的中心(水平+垂直)如下所示。
--------------------------------
| |
| |
| User : xyz |
| Pass : **** |
| |
| |
--------------------------------
我想像上面指出的那样运行我的整个程序。有什么办法吗?如有任何帮助或建议,不胜感激。
这个怎么样(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;
}
你懂的。当输出垂直居中时,只需在控制台的顶部放置填充结束行。
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;
}
如果你想让你的应用程序在一个控制台上,但想做一些布局,我建议使用ncurses,因为它给你更多的控制打印的地方,也给你一个创建菜单,消息框和其他类似gui的东西的可能性
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 截取屏幕截图后程序卡住
- C++鼠标单击时的屏幕截图不起作用
- 屏幕插入运算符<<的运算符过载问题
- 获取网格中心的屏幕位置
- SFML 中的字体.信息不显示在屏幕上.显示的不是信息,而是点
- 如何在屏幕上环绕x和y?
- GetDIBits 在屏幕捕获函数中多次迭代后返回零
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- GTKMM:拍摄绘图区域的屏幕截图?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- 使用 C++将文本光标移动到屏幕中不可见的行