Dr *_*eco 17 c size console windows-console
如何在Windows下使用普通c在控制台窗口中检查ymax和xmax?
这段代码用于linux:
#include <stdio.h>
#include <sys/ioctl.h>
int main (void)
{
    struct winsize max;
    ioctl(0, TIOCGWINSZ , &max);
    printf ("lines %d\n", max.ws_row);
    printf ("columns %d\n", max.ws_col);
}
现在我想知道如何为Windows做同样的事情.我试过winioctl.h但它没有定义struct winsize任何其他类似的名称.
有小费吗?谢谢.
PS.在linux中,您还可以使用找到控制台大小getenv("LINES");.Windows下有类似的变量吗?
PPS.此外,总有一种情况ncurses.h,我认为这两种系统都可以工作,但是由于与我所拥有的其他库的冲突,我正在避免它.
购买力平价.这个问题在这里得到C的终端宽度?有很多提示,所以不需要重复.
qua*_*tum 28
这将打印控制台的大小,而不是缓冲区:
#include <windows.h>
int main(int argc, char *argv[]) {
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    int columns, rows;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
    rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
    printf("columns: %d\n", columns);
    printf("rows: %d\n", rows);
    return 0;
}
此代码有效,因为srWindow"包含显示窗口的左上角和右下角的控制台屏幕缓冲区坐标",并且SMALL_RECT结构"根据MSDN指定屏幕缓冲区字符单元格的行和列".我减去了平行边以获得控制台窗口的大小.由于我1的实际价值低于实际值,我加了一个.
(部分答案)
这段代码:
CONSOLE_SCREEN_BUFFER_INFO csbi;
int ret;
ret = GetConsoleScreenBufferInfo(GetStdHandle( STD_OUTPUT_HANDLE ),&csbi);
if(ret)
{
    printf("Console Buffer Width: %d\n", csbi.dwSize.X);
    printf("Console Buffer Height: %d\n", csbi.dwSize.Y);
}
给出缓冲区的大小.唯一的问题是,这dwSize.Y不是屏幕的大小(这里300而不是25行).但dwSize.X匹配列的编号.只windows.h需要工作.