You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Windows API将控制台窗口调整为指定尺寸?

问题

我有一段简单的演示代码,可在控制台的(100,100)坐标处绘制一个白色像素。我想了解是否可以修改屏幕尺寸,设置int WIDTH = 1000; int HEIGHT = 1000这类变量,使控制台契合该尺寸?

#include<windows.h>
#include<stdio.h>

int main(void) {
    //Get a console handle
    HWND console = GetConsoleWindow();
    //Get a handle to device context
    HDC dc = GetDC(console);

    //Choose any color
    COLORREF COLOR= RGB(255,255,255); 

    SetPixel(dc,100,100,COLOR);

    ReleaseDC(console, dc);
}
解决方案

可以通过Windows API调整控制台窗口尺寸,让其客户区恰好匹配你设定的1000x1000像素。核心是计算包含标题栏、边框的完整窗口尺寸,再调用API设置,同时调整控制台缓冲区避免滚动条干扰。

修改后的代码如下:

#include<windows.h>
#include<stdio.h>

int main(void) {
    const int TARGET_WIDTH = 1000;
    const int TARGET_HEIGHT = 1000;

    // 获取控制台窗口句柄
    HWND console = GetConsoleWindow();
    if (!console) {
        printf("Failed to get console window handle\n");
        return 1;
    }

    // 获取窗口风格,用于计算整体尺寸
    LONG style = GetWindowLongPtr(console, GWL_STYLE);
    RECT clientRect = {0, 0, TARGET_WIDTH, TARGET_HEIGHT};
    // 计算包含边框和标题栏的窗口整体尺寸
    AdjustWindowRect(&clientRect, style, FALSE);

    // 设置窗口位置和大小(居中显示)
    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);
    int windowX = (screenWidth - (clientRect.right - clientRect.left)) / 2;
    int windowY = (screenHeight - (clientRect.bottom - clientRect.top)) / 2;
    SetWindowPos(console, NULL, windowX, windowY, 
                 clientRect.right - clientRect.left, 
                 clientRect.bottom - clientRect.top, 
                 SWP_SHOWWINDOW);

    // 调整控制台缓冲区大小,避免出现滚动条
    HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
    GetConsoleScreenBufferInfo(consoleHandle, &bufferInfo);
    COORD newBufferSize = {bufferInfo.srWindow.Right + 1, bufferInfo.srWindow.Bottom + 1};
    SetConsoleScreenBufferSize(consoleHandle, newBufferSize);

    // 绘制黄色像素
    HDC dc = GetDC(console);
    COLORREF color = RGB(255, 255, 0); 
    SetPixel(dc, 100, 100, color);
    ReleaseDC(console, dc);

    // 暂停窗口方便查看效果
    printf("Press any key to exit...\n");
    getchar();

    return 0;
}

关键步骤说明

  • 计算完整窗口尺寸:AdjustWindowRect根据目标客户区尺寸和窗口风格,算出包含边框、标题栏的窗口总大小,确保客户区刚好为1000x1000像素。
  • 居中窗口:通过GetSystemMetrics获取屏幕分辨率,计算居中坐标,优化显示体验。
  • 消除滚动条:将控制台缓冲区尺寸设置为与窗口可视区域一致,避免滚动条影响绘制区域。
  • 修正像素颜色:将原白色像素改为你需求的黄色(RGB(255,255,0))。

注意事项

  • 运行后窗口会自动调整到目标尺寸,按下任意键退出;若需窗口持续打开,可保留getchar()或添加其他阻塞逻辑。
  • 部分系统对控制台窗口有尺寸限制,若1000x1000超出限制,会自动调整到系统允许的最大尺寸。

内容的提问来源于stack exchange,提问作者Saw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:05:23