Войти

Показать полную графическую версию : Win32 API | PureBasic | Управление буфером консольного окна


unhappy
22-11-2006, 10:20
Добрый день.
Мне необходимо изменить размер буфера консольного окна.
Я нашел описание функции SetConsoleScreeBufferSize_ на http://msdn.microsoft.com
Но когда я запускаю на выполнение такой код:
If OpenConsole()
stdout.l=GetStdHandle_(#STD_OUTPUT_HANDLE)
mySize.COORD
mySize\x = 80
mySize\y = 29
SetConsoleScreenBufferSize_(stdout, mySize)
Debug(Str(GetLastError_()) )
EndIf
ничего не происходит. В дебаге я получаю код ошибки 87 (на MSDN сказано: ERROR_INVALID_PARAMETER - The parameter is incorrect.)
Вместе с тем параметр, как видно из кода, заявлен как и нужно COORD, handle окна ловится нормально потому что вот такой код, к примеру, работает нормально:
If OpenConsole()
stdout.l=GetStdHandle_(#STD_OUTPUT_HANDLE)
NewSize.SMALL_RECT
NewSize\Top = 0
NewSize\Left = 0
NewSize\Bottom=29
NewSize\Right=80
SetConsoleWindowInfo_(stdout,1,@NewSize)
EndIf
и окно (само окно, а не буфер) ресайзится нормально.
Кто сталкивался с чем-либо похожим?

amel27
23-11-2006, 12:51
unhappy
спасибо за сабж... очень неплох, жаль небесплатный :(
насколько понял из справки пурибасик поддерживает передачу сруктур (в функции и процедуры) только "по ссылке", а SetConsoleScreenBufferSize принимает структуру "по значению".You must pass a pointer to this variable as you cannot pass structured variables directly. ...тем не менее удалось его обмануть заменив структуру на число двойной длины:
If OpenConsole()
stdout.l=GetStdHandle_(#STD_OUTPUT_HANDLE)
NewSize.SMALL_RECT
NewSize\top = 0
NewSize\left = 0
NewSize\bottom=50
NewSize\right=50
SetConsoleWindowInfo_(stdout,1,@NewSize)

mySize.l
mySize = (51 << 16) + 51
SetConsoleScreenBufferSize_(stdout, mySize)
Debug(Str(GetLastError_()) )
EndIf

unhappy
26-03-2007, 11:34
amel27
Спасибо! Сейчас попробовал - всё работает.
Действительно же в описаниии функции на msdn указано, что надо передавать не указатель на структуру, а именно параметр в dword. это всё невнимательность :(
Полную версию PureBasic можно найти на ru-board'е




© OSzone.net 2001-2012