Windows SetConsoleScreenBufferSize() returning an odd error code

webwraith webwraith at fastmail.fm
Sat Oct 5 01:32:34 PDT 2013


I'm not sure if it's my code, although I feel fairly confident it 
isn't, but SetConsoleScreenBufferSize() is failing with error 87, 
which a quick browse of MSDN tells me is ERROR_INVALID_PARAMETER. 
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?

---

module sample;

import std.c.windows.windows;
import std.conv;
import std.format;
import std.array;
import std.stdio;

alias HANDLE handle;

void main(){
	auto buff = 
CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 
FILE_SHARE_READ|FILE_SHARE_WRITE, null, CONSOLE_TEXTMODE_BUFFER, 
null);
	if( buff == INVALID_HANDLE_VALUE )
		throw new Exception("Unable to create new screen buffer. Error: 
" ~ text( GetLastError() ) );
	
	COORD c = {60, 30};
	
	// get the console window dims, to make sure this screen buffer 
is as large or larger
	CONSOLE_SCREEN_BUFFER_INFO* csbi = new 
CONSOLE_SCREEN_BUFFER_INFO;
	
	GetConsoleScreenBufferInfo( buff, csbi );
	short width = 
cast(short)(csbi.srWindow.Right-csbi.srWindow.Left);
	short height = 
cast(short)(csbi.srWindow.Bottom-csbi.srWindow.Top);
	
	if(c.X<width)
		c.X = width;
	if(c.Y<height)
		c.Y = height;
	
	// set the screen buffer size !!!<= THIS IS WHAT DOESN'T WORK!
	if(SetConsoleScreenBufferSize( buff, c ) == 0){
		auto err = GetLastError();
		throw new Exception("Unable to set buffer dimensions. Error: " 
~ text(err) );
	}
	
	SetConsoleTextAttribute( buff, 
FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|BACKGROUND_INTENSITY 
);
	
	c.X = 2; c.Y = 28;
	SetConsoleCursorPosition( buff, c );
	readln();
}
---

In advance, I really appreciate any help you can give me


More information about the Digitalmars-d-learn mailing list