The problem is that 'EditSize' isn't always compatible with the user's virtual console metrics. This workaround seemed to fix it:
Code:
void RealRedimWindow(COORD *size)
{
COORD maxSize;
int newSize, oldSize;
TestApiError(GetConsoleScreenBufferInfo(hStdOut, &csbi));
maxSize = csbi.dwMaximumWindowSize;//GetLargestConsoleWindowSize(hStdOut);
*size = maxSize;
if (size->X > maxSize.X || size->Y > maxSize.Y)
{
BadParameter();
return;
}
oldSize = csbi.dwSize.X * csbi.dwSize.Y;
newSize = size->X * size->Y;
csbi.dwSize = *size;
if (newSize == oldSize)
{
return;
}
// Current buffer is higher, redim window first, then buffer
if (newSize < oldSize)
{
TestApiError(SetConsoleWindowInfo(hStdOut, 1, &csbi.srWindow));
TestApiError(SetConsoleScreenBufferSize(hStdOut, csbi.dwSize));
}
else
{
TestApiError(SetConsoleScreenBufferSize(hStdOut, csbi.dwSize));
TestApiError(SetConsoleWindowInfo(hStdOut, 1, &csbi.srWindow));
}
ConsoleCharNbr = newSize;
TestApiError(GetConsoleScreenBufferInfo(hStdOut, &csbi));
TestApiError(SetConsoleMode(hStdOut, 0));
TestApiError(SetConsoleMode(hStdIn, ENABLE_PROCESSED_INPUT));
ClrScr();
}