Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Typedef struct CONSOLE_SCREEN_BUFFER_INFO




{COORD dwSize;

COORD dwCursorPosition;

WORD wAttributes;

SMALL_RECT srWindow;

COORD dwMaximumWindowSize;

} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;

Нас в этой структуре интересует поле dwCursorPosition, которое и предоставляет данные о положении курсора. Функция GetConsoleScreenBufferInfo имеет прототип

BOOL GetConsoleScreenBufferInfo(HANDLE hConsOut, CONSOLE_SCREEN_BUFFER_INFO* lpConsoleScreenBufferInfo);

Следующий пример демонстрирует управление курсором экрана консоли

#include <windows.h>

#include <wincon.h>

#include <stdio.h>

void main()

{char text1[]="Text for example\t";

DWORD actlen;

HANDLE hstdout;

CONSOLE_SCREEN_BUFFER_INFO consinfo;

COORD coorpos;

hstdout=GetStdHandle(STD_OUTPUT_HANDLE);

if(hstdout==INVALID_HANDLE_VALUE)ExitProcess(0);

GetConsoleScreenBufferInfo(hstdout,&consinfo);

coorpos.Y=(short)(consinfo.dwCursorPosition.Y+5);

coorpos.X=(short)(consinfo.dwCursorPosition.X+25);

SetConsoleCursorPosition(hstdout,coorpos);

WriteConsole(hstdout,text1,sizeof(text1),&actlen,NULL);

getchar();

CloseHandle(hstdout);

ExitProcess(0);

}

 

Для многократного вывода одного символа предназначена функция FillConsoleOutputCharacterA, а для многократного вывода одного и того же атрибута – функция FillConsoleOutputAttribute. Эти функции имеют следующие прототипы

BOOL FillConsoleOutputCharacterA(HANDLE hConsOut, CHAR character, WORD len, COORD pos, DWORD* actlen);

BOOL FillConsoleOutputAttribute(HANDLE hConsOut, WORD attr, WORD len,

COORD pos, DWORD* actlen);

Первые аргументы этих функций задают хэндл экрана консоли, вторые, соответственно, выводимый символ или выводимый атрибут, параметр len задает число повторений вывода этого символа или атрибута, а параметр actlen задает адрес для возврата числа действительно выполненных повторений. Это число может отличаться от заказанного в вызове системной функции, если в процессе вывода достигнут конец экрана. Параметр pos задает позицию экрана, начиная с которой эти функции выполняют свой вывод.

Для задания атрибутов можно использовать символические константы, заданные в заголовочном файле wincon.h.

Ниже приведен пример использования рассмотренных функций

#include <windows.h>

//#include <wincon.h>

#include <stdio.h>

void main()

{HANDLE hstdout;

char ch='@';

char ch2='$';

COORD pos;

DWORD actlen;

WORD attri=0x3e;

hstdout=GetStdHandle(STD_OUTPUT_HANDLE);

if(hstdout==INVALID_HANDLE_VALUE)

{printf("Error GetStdHandle\n");exit(-1);}

pos.X=0;pos.Y=9;

FillConsoleOutputCharacterA(hstdout,ch,400,pos,&actlen);

pos.X=2;pos.Y=14;

FillConsoleOutputAttribute(hstdout,attri,200,pos,&actlen);

pos.X=0;pos.Y=14;

FillConsoleOutputCharacterA(hstdout,ch2,300,pos,&actlen);

getchar();

CloseHandle(hstdout);

ExitProcess(0);

}

Для вывода строки текста в произвольную позицию экрана служит функция

BOOL WriteConsoleOutputCharacterA(HANDLE hConsOut, CSTR* text, DWORD len, COORD pos, DWORD* actlen);

Параметры, используемые в этой функции имеют те же назначения, что и одноименные – описанные ранее. Следующий пример иллюстрирует применения функции

#include <windows.h>

//#include <wincon.h>

#include <stdio.h>

void main()

{char text1[]="Color text for example";

COORD pos;

DWORD actlen;

HANDLE hstdout;

short attri=0x2e;

int len=sizeof(text1);

hstdout=GetStdHandle(STD_OUTPUT_HANDLE);

if(hstdout==INVALID_HANDLE_VALUE)

{printf("Error GetStdHandle\n");exit(-1);}

pos.X=20;pos.Y=9;

FillConsoleOutputAttribute(hstdout,attri,len,pos,&actlen);

WriteConsoleOutputCharacterA(hstdout,text1,len,pos,&actlen);

getchar();

CloseHandle(hstdout);

ExitProcess(0);

}

Вывод символов вместе с атрибутами осуществляет функция

BOOL WriteConsoleOutputA(HANDLE hConsOut, CHAR_INFO* cells, COORD dwBufferSize, COORD dwBufferCoord, SMALL_RECT* rect);

По существу возможности этой функции значительно шире. Они позволяют вернуть на экран, не обязательно в то же место, запомненный ранее в памяти фрагмент текcтового изображения экрана с полным учетом цветовых атрибутов. Функция эта в качестве исходной отображаемой информации использует двумерный массив (а не одномерный, как в OS/2) ячеек, хранящих всю отображаемую информацию о символах на экране. Этот массив задается для функции адресом в параметре cells. Его элементы должны быть описаны как имеющие тип CHAR_INFO, который в заголовочном файле дается описанием

Typedef struct CHAR_INFO

Union

{WCHAR UnicodeChar;

CHAR AsciiChar;

} Char;

WORD Attributes;

} CHAR_INFO, *PCHAR_INFO;

Параметр dwBufferSize задает измерения этого массива: сколько в нем строк и сколько столбцов, а параметр dwBufferCoord определяет позицию в этом массиве, начиная от которой его элементы выводятся на экран как символы с их атрибутами. Последний параметр rect задает прямоугольную область экрана, в которую предназначен вывод текста с его атрибутами. Тип этого параметра описан в заголовочном файле как





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 779 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Человек, которым вам суждено стать – это только тот человек, которым вы сами решите стать. © Ральф Уолдо Эмерсон
==> читать все изречения...

2316 - | 2171 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.