SetConsoleWindowInfo功能可用于在控制台窗口中滚动屏幕缓冲区的内容。此函数也可以更改窗口大小。该函数可以将屏幕缓冲区窗口的新左上角和右下角指定为绝对屏幕缓冲区坐标,也可以从当前窗口坐标指定更改。如果指定的窗口坐标在屏幕缓冲区的边界之外,该函数将失败。
以下示例通过修改GetConsoleScreenBufferInfo函数返回的绝对窗口坐标将屏幕缓冲区的视图向上滚动一行。
HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
SMALL_RECT srctWindow;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
/ *获取当前屏幕缓冲区大小和窗口位置。*/
if(!GetConsoleScreenBufferInfo(hStdout,& csbiInfo))
MyErrorExit("GetConsoleScreenBufferInfo");
/ *将srctWindow设置为当前窗口大小和位置。*/
srctWindow = csbiInfo.srWindow;
/ *如果窗口不在屏幕缓冲区顶部,请将其向上移动一行。*/
if(srctWindow.Top > 0){
srctWindow.Top -= 1; /* move top up by one row */
srctWindow.Bottom -= 1; /* move bottom up by one row */
if(!SetConsoleWindowInfo(
hStdout,/ *屏幕缓冲区句柄* /
TRUE,/ *绝对坐标* /
& srctWindow))/ *指定新位置* /
MyErrorExit("SetConsoleWindowInfo");
}
可以通过指定窗口坐标中的更改来完成相同的滚动。
/ *获取当前屏幕缓冲区窗口的位置。*/
if(!GetConsoleScreenBufferInfo(hStdout,& csbiInfo))
MyErrorExit("GetConsoleScreenBufferInfo");
/ *如果窗口不在屏幕缓冲区顶部,请将其向上移动一行。*/
if(csbiInfo.srWindow.Top > 0){
srctWindow.Top = -1; /* move top up by one row */
srctWindow.Bottom = -1; /* move bottom up by one row */
srctWindow.Left = 0; /* no change */
srctWindow.Right = 0; /* no change */
if(!SetConsoleWindowInfo(
hStdout,/ *屏幕缓冲区句柄* /
FALSE,/ * deltas,不是绝对的* /
& srctWindow))/ *指定新位置* /
MyErrorExit("SetConsoleWindowInfo");
}