如何在C ++中居中输出控制台窗口

时间:2018-07-15 03:24:28

标签: c++ console-application

我当前在Windows.h标头中使用MoveWindow()函数,并且使用此函数,可以根据需要移动和调整输出控制台窗口的大小。

MoveWindow(GetConsoleWindow(), x, y, width, height, TRUE);
// x and y is the position of the topleft corner of window

但是,如果不对窗口的位置进行硬编码,就无法弄清楚如何使屏幕居中。有没有一种方法可以将窗口的位置设置为根据我设置的宽度和高度而变化?谢谢!

P.S。我对C ++很陌生

1 个答案:

答案 0 :(得分:1)

获取屏幕的WindowRect(不要与ClientWindow混淆)并找到中间位置,但是ClientRect将保持不变,因为我们没有调整大小。请尝试以下代码段:

已编辑:用于正确居中并允许用户指定位置

void MoveWindow(int posx, int posy) 
{
    RECT rectClient, rectWindow;
    HWND hWnd = GetConsoleWindow();
    GetClientRect(hWnd, &rectClient);
    GetWindowRect(hWnd, &rectWindow);
    MoveWindow(hWnd, posx, posy, rectClient.right - rectClient.left, rectClient.bottom - rectClient.top, TRUE);
}

void MoveCenter()
{
    RECT rectClient, rectWindow;
    HWND hWnd = GetConsoleWindow();
    GetClientRect(hWnd, &rectClient);
    GetWindowRect(hWnd, &rectWindow);
    int posx, posy;
    posx = GetSystemMetrics(SM_CXSCREEN) / 2 - (rectWindow.right - rectWindow.left) / 2,
    posy = GetSystemMetrics(SM_CYSCREEN) / 2 - (rectWindow.bottom - rectWindow.top) / 2,

    MoveWindow(hWnd, posx, posy, rectClient.right - rectClient.left, rectClient.bottom - rectClient.top, TRUE);
}

int main(int argc, char *argv[])
{
    MoveWindow(10, 10);
    return 0;
}