Windows SetConsoleScreenBufferSize() returning an odd error code
webwraith
webwraith at fastmail.fm
Sat Oct 5 10:57:00 PDT 2013
On Saturday, 5 October 2013 at 11:24:49 UTC, Andrej Mitrovic
wrote:
> On 10/5/13, webwraith <webwraith at fastmail.fm> wrote:
>> Could someone give this code the quick once over and tell me
>> where I'm going wrong, or simply how to get this to work?
>
> In the docs:
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms686044%28v=vs.85%29.aspx
>
> It says:
>
> dwSize [in]
>
> A COORD structure that specifies the new size of the console
> screen buffer, in character rows and columns. The specified
> width and
> height cannot be less than the width and height of the console
> screen
> buffer's window.
> **The specified dimensions also cannot be less than the minimum
> size
> allowed by the system. This minimum depends on the current
> font size
> for the console (selected by the user) and the SM_CXMIN and
> SM_CYMIN
> values returned by the GetSystemMetrics function.**
>
> So you need to make these calls:
>
> -----
> short width = cast(short)(csbi.srWindow.Right -
> csbi.srWindow.Left);
> short height = cast(short)(csbi.srWindow.Bottom -
> csbi.srWindow.Top);
>
> auto minX = GetSystemMetrics(SM_CXMIN);
> auto minY = GetSystemMetrics(SM_CYMIN);
>
> c.X = cast(short)max(minX, width);
> c.Y = cast(short)max(minY, height);
> -----
>
> Also make sure to import std.algorithm to use the max()
> function.
Thank you for pointing that out. It's a pity it's both annoying
and confusing.
According to my system, GetSystemMetrics(SM_CXMIN) returns 132,
and GetSystemMetrics(SM_CYMIN) returns 38, despite the fact that
I can go into the preferences on the console window in question,
and create a screen buffer that is 80x20, and even my intended
60x30. Truly frustrating...
More information about the Digitalmars-d-learn
mailing list