|
|
|
|
|
|
|
#include <windows.h> |
|
#include <stdio.h> |
|
#include <conio.h> |
|
#include <io.h> |
|
#include <cassert> |
|
|
|
#include "TestUtil.cc" |
|
|
|
int main() |
|
{ |
|
HANDLE origBuffer = GetStdHandle(STD_OUTPUT_HANDLE); |
|
HANDLE childBuffer = CreateConsoleScreenBuffer( |
|
GENERIC_READ | GENERIC_WRITE, |
|
FILE_SHARE_READ | FILE_SHARE_WRITE, |
|
NULL, CONSOLE_TEXTMODE_BUFFER, NULL); |
|
|
|
SetConsoleActiveScreenBuffer(childBuffer); |
|
|
|
while (true) { |
|
char buf[1024]; |
|
CONSOLE_SCREEN_BUFFER_INFO info; |
|
|
|
assert(GetConsoleScreenBufferInfo(origBuffer, &info)); |
|
trace("child.size=(%d,%d)", (int)info.dwSize.X, (int)info.dwSize.Y); |
|
trace("child.cursor=(%d,%d)", (int)info.dwCursorPosition.X, (int)info.dwCursorPosition.Y); |
|
trace("child.window=(%d,%d,%d,%d)", |
|
(int)info.srWindow.Left, (int)info.srWindow.Top, |
|
(int)info.srWindow.Right, (int)info.srWindow.Bottom); |
|
trace("child.maxSize=(%d,%d)", (int)info.dwMaximumWindowSize.X, (int)info.dwMaximumWindowSize.Y); |
|
|
|
int ch = getch(); |
|
sprintf(buf, "%02x\n", ch); |
|
DWORD actual = 0; |
|
WriteFile(childBuffer, buf, strlen(buf), &actual, NULL); |
|
if (ch == 0x1b || ch == 0x03) |
|
break; |
|
|
|
if (ch == 'b') { |
|
setBufferSize(origBuffer, 40, 25); |
|
} else if (ch == 'w') { |
|
setWindowPos(origBuffer, 1, 1, 38, 23); |
|
} else if (ch == 'c') { |
|
setCursorPos(origBuffer, 10, 10); |
|
} |
|
} |
|
|
|
SetConsoleActiveScreenBuffer(origBuffer); |
|
|
|
return 0; |
|
} |
|
|