PUCRS
Programação de Software Básico
Faculadade de Informática


Consoles em Windows

Utilizando as funções descritas abaixo, crie uma biblioteca com funções de manipulação de console no Windows. Crie pelo menos as seguintes funções:

- void posicWindow(int x, int y): posiciona a janela de console em algum lugar da tela, dado pelo par (x,y).
- void gotoXY(int x, int y): posiciona o cursor na tela, na posição x,y.
- void ImprimeConsoleInfo(): fornece informações sobre o console atual.

Para maiores informações sobre o uso de consoles, consulte a documentação da MSDN
http://msdn.microsoft.com/library/en-us/dllproc/base/console_reference.asp

GetStdHandle

GetStdHandle(STD_OUTPUT_HANDLE) : Obtém  um apontador para o console padrão ativo no momento.


SetConsoleTitle

The SetConsoleTitle function sets the title bar string for the current console window.

BOOL SetConsoleTitle(
LPCTSTR
lpConsoleTitle // address of new title
);

Parameters

lpConsoleTitle
Pointer to a null-terminated string that contains the string to appear in the title bar of the console window.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

Windows NT: This function uses either Unicode characters or 8-bit characters from the console's current code page. The console's code page defaults initially to the system's OEM code page. To change the console's code page, use the SetConsoleCP or SetConsoleOutputCP functions, or use the chcp or mode con cp select= commands.



SetConsoleCursorPosition

The SetConsoleCursorPosition function sets the cursor position in the specified console screen buffer.
BOOL SetConsoleCursorPosition(
HANDLE
hConsoleOutput, // handle to console screen buffer
COORD dwCursorPosition // new cursor position coordinates
);

Parameters

hConsoleOutput
Handle to a console screen buffer. The handle must have GENERIC_WRITE access.
dwCursorPosition
Specifies a COORD structure containing the new cursor position. The coordinates are the column and row of a screen buffer character cell. The coordinates must be within the boundaries of the screen buffer.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The cursor position determines where characters written by the WriteFile or WriteConsole function, or echoed by the ReadFile or ReadConsole function, are displayed. To determine the current position of the cursor, use the GetConsoleScreenBufferInfo function.

If the new cursor position is not within the boundaries of the screen buffer's window, the window origin changes to make the cursor visible.



WriteConsole

The WriteConsole function writes a character string to a console screen buffer beginning at the current cursor location.

BOOL WriteConsole(
HANDLE
hConsoleOutput, // handle to a console screen buffer
CONST VOID *lpBuffer, // pointer to buffer to write from
DWORD nNumberOfCharsToWrite,
// number of characters to write
LPDWORD lpNumberOfCharsWritten,
// pointer to number of characters written
LPVOID lpReserved // reserved
);

Parameters

hConsoleOutput
Handle to the console screen buffer to be written to. The handle must have GENERIC_WRITE access.
lpBuffer
Pointer to a buffer that contains characters to be written to the screen buffer.
nNumberOfCharsToWrite
Specifies the number of characters to write.
lpNumberOfCharsWritten
Pointer to a 32-bit variable that receives the number of characters actually written.
lpReserved
Reserved; must be NULL.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

WriteConsole writes characters to a console screen buffer. It behaves like the WriteFile function, except it can write in either Unicode (wide-character) or ANSI mode. To create an application that maintains a single set of sources compatible with both modes, use WriteConsole rather than WriteFile. Although WriteConsole can be used only with a console screen buffer handle, WriteFile can be used with other handles (such as files or pipes). WriteConsole fails if used with a standard handle that has been redirected to be something other than a console handle.

Although an application can use WriteConsole in ANSI mode to write ANSI characters, consoles do not support ANSI escape sequences. However, some Win32 functions provide equivalent functionality: for example, SetCursorPos, SetConsoleTextAttribute, and GetConsoleCursorInfo.

WriteConsole writes characters to the screen buffer at the current cursor position. The cursor position advances as characters are written. The SetConsoleCursorPosition function sets the current cursor position.

Characters are written using the foreground and background color attributes associated with the screen buffer. The SetConsoleTextAttribute function changes these colors. To determine the current color attributes and the current cursor position, use GetConsoleScreenBufferInfo.

All of the input modes that affect the behavior of WriteFile have the same effect on WriteConsole. To retrieve and set the output modes of a console screen buffer, use the GetConsoleMode and SetConsoleMode functions.

Windows NT: This function uses either Unicode characters or 8-bit characters from the console's current code page. The console's code page defaults initially to the system's OEM code page. To change the console's code page, use the SetConsoleCP or SetConsoleOutputCP functions, or use the chcp or mode con cp select= commands.



GetConsoleScreenBufferInfo

The GetConsoleScreenBufferInfo function retrieves information about the specified console screen buffer.

BOOL GetConsoleScreenBufferInfo(
HANDLE
hConsoleOutput, // handle to console screen buffer
PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
// address of screen buffer info.
);

Parameters

hConsoleOutput
Handle to a console screen buffer. The handle must have GENERIC_READ access.
lpConsoleScreenBufferInfo
Pointer to a CONSOLE_SCREEN_BUFFER_INFO structure in which the screen buffer information is returned.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The rectangle returned in the srWindow member of the CONSOLE_SCREEN_BUFFER_INFO structure can be modified and then passed to the SetConsoleWindowInfo function to scroll the screen buffer in the window, to change the size of the window, or both.

All coordinates returned in the CONSOLE_SCREEN_BUFFER_INFO structure are in character-cell coordinates, where the origin (0, 0) is at the upper-left corner of the screen buffer.




SetConsoleWindowInfo

The SetConsoleWindowInfo function sets the current size and position of a console screen buffer's window.

BOOL SetConsoleWindowInfo(
HANDLE
hConsoleOutput, // handle to console screen buffer
BOOL bAbsolute, // coordinate type flag
CONST SMALL_RECT *lpConsoleWindow
// address of new window rectangle
);

Parameters

hConsoleOutput
Handle to a console screen buffer. The handle must have GENERIC_WRITE access.
bAbsolute
Specifies how the coordinates in the structure pointed to by the lpConsoleWindow parameter are used. If bAbsolute is TRUE, the coordinates specify the new upper-left and lower-right corners of the window. If it is FALSE, the coordinates are offsets to the current window-corner coordinates.
lpConsoleWindow
Pointer to a SMALL_RECT structure that contains values that determine the new upper-left and lower-right corners of the window.

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The function fails if the specified window rectangle extends beyond the boundaries of the screen buffer. This means that the Top and Left members of the lpConsoleWindow rectangle (or the calculated top and left coordinates, if bAbsolute is FALSE) cannot be less than zero. Similarly, the Bottom and Right members (or the calculated bottom and right coordinates) cannot be greater than (screen buffer height – 1) and (screen buffer width – 1), respectively. The function also fails if the Right member (or calculated right coordinate) is less than or equal to the Left member (or calculated left coordinate) or if the Bottom member (or calculated bottom coordinate) is less than or equal to the Top member (or calculated top coordinate).

For consoles with more than one screen buffer, changing the window location for one screen buffer does not affect the window locations of the other screen buffers.

To determine the current size and position of a screen buffer's window, use the GetConsoleScreenBufferInfo function. This function also returns the maximum size of the window, given the current screen buffer size, the current font size, and the screen size. The GetLargestConsoleWindowSize function returns the maximum window size given the current font and screen sizes, but it does not consider the size of the screen buffer.

SetConsoleWindowInfo can be used to scroll the contents of the screen buffer by shifting the position of the window rectangle without changing its size.