Управление курсором в консоли

Управление курсором в консоли

Для начала работы с консолью необходимо получить ее дескриптор.

Функция получения дескриптора стандартного устройства ввода, вывода или ошибки в зависимости от переданного константного параметра:
HANDLE WINAPI GetStdHandle(__in DWORD nStdHandle);

nStdHandle может принимать значения

  • STD_INPUT_HANDLE = -10; // устройство ввода
  • STD_OUTPUT_HANDLE = -11; // устройство вывода
  • STD_ERROR_HANDLE = -12; // ошибка

Использование русского языка в консоли с помощью API

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

  • Кодовая страница консоли вывода
    BOOL WINAPI SetConsoleOutputCP(UINT wCodePageID);
  • Кодовая страница консоли ввода
    BOOL WINAPI SetConsoleCP(UINT wCodePageID);

где wCodePageID — номер кодовой страницы.
Для перекодировки на русский язык используется кодовая страница wCodePageID=1251 .

Для перекодировки русского текста, введенного в Win-коде также может использоваться функция

  • lpszSrc – указатель на строку-источник;
  • lpszDst/strong> – указатель на строку-приемник

Возвращаемое значение 1 в случае успешной перекодировки.

Чтение/запись данных в консоль/файл

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

В случае успешного завершения функции возвращают ненулевое значение.
Аргументы функций

  • hFile -дескриптор файла/консоли. Файл/консоль должен иметь доступ для чтения для функции ReadFile() и доступ для записи для функции WriteFile() .
  • lpBuffer — указатель на буфер (строку) для чтения/записи данных.
  • nNumberOfBytesToWrite — число байтов, которые будут записаны в файл.
  • lpNumberOfBytesWritten — указатель на переменную, которая получает число считанных/записанных байтов.
  • lpOverlapped — указатель на структуру OVERLAPPED , которая используется в операциях асинхронного ввода-вывода (например, получение данных по интерфейсу связи). Для синхронного ввода-вывода данный указатель имеет значение NULL .

Установка заголовка окна консоли

Функция установки заголовка окна консоли

lpConsoleTitle – указатель на строку имени консоли с завершающим нуль-символом

Установка цвета символов и фона в консоли

Цвет символов и фона задается с помощью констант, определяющих тетрады символов.
Цвет символов

  • FOREGROUND_BLUE = 0x01
  • FOREGROUND_GREEN = 0x02
  • FOREGROUND_RED = 0x04
  • FOREGROUND_INTENSITY = 0x08
  • BACKGROUND_BLUE = 0x10
  • BACKGROUND_GREEN = 0x20
  • BACKGROUND_RED = 0x40
  • BACKGROUND_INTENSITY = 0x80
Читайте также:  Как вернуть удаленные фото на ксиоми

Каждая тетрада, определяющая цвет символов или фона, представляет собой значение от 0 до 15, задаваемая логической суммой соответствующих констант:

Например, цвет символов с кодом 13 задается как

FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY .

Функция определения атрибутов вводимых символов в окне консоли

  • hConsoleOutput – дескриптор буфера консоли вывода;
  • wAttributes – цвет букв и фона, получаемый путем комбинации констант

Функция, задающая цвет фона консоли(путем закрашивания фона отдельных символов)

  • hConsoleOutput – дескриптор буфера вывода консоли;
    wAttribute – атрибут цвета фона символа в консоли;
  • nLength – количество ячеек символов, фон которых устанавливается заданным цветом;
  • dwWriteCoord – координаты первой закрашиваемой ячейки;
  • lpNumberOfAttrsWritten – указатель на идентификатор, в который записывается количество реально закрашенных ячеек.

Для того чтобы изменить цвет всего окна консоли необходимо задать цвет символов, количество которых определяется размером окна консоли. Размер стандартного окна консоли 80×25 = 2000 символов.

Установка позиции курсора

Функция установки позиции курсора в окне консоли

hConsoleOutput – дескриптор буфера вывода консоли;
dwCursorPosition – структура координат COORD, определяющая позицию курсора.

Структура координат представляет собой

Результат выполнения

Примечание: для корректной компиляции программы необходимо изменить тип кодировки проекта на многобайтовую.

Работа с мышкой.

Отслеживание курсора мышки

Частенько приложению требуется знать координаты курсора мышки. Обычно, это графические программы, которые отслеживают координаты курсора во время рисования какого-нибудь рисунка. Так же отслеживать положение мышки необходимо приложениям работающим с текстом для возможности выделения блоков текста.

Для того, чтобы отслеживать курсор мышки, обычно необходимо обработать три сообщения WM_LBUTTONDOWN, WM_MOUSEMOVE, и WM_LBUTTONUP. Как правило, отслеживание курсора начинается с поступления сообщения WM_LBUTTONDOWN, в параметре lParam которого записаны координаты курсора. Далее начинается сам процесс отслеживания путём обработки потока сообщений WM_MOUSEMOVE которые постит само окно при перемещении мышки. Поступление сообщения WM_LBUTTONUP сигнализирует об окончании процесса отслеживания.

Читайте также:  Слайд шоу на годовщину свадьбы

Так же можно использовать функцию TrackMouseEvent, чтобы заставить систему посылать другие сообщения необходимые для отслеживания курсора. Сообщение WM_MOUSEHOVER посылается системой когда мышка попадает в клиентскую область, а сообщение WM_MOUSELEAVE — когда курсор покидает клиентскую область. Соответственно, сообщения WM_NCMOUSEHOVER и WM_NCMOUSELEAVE отвечают за неклиентскую область.

Рисование линий при помощи мышки

В данном разделе статьи представлена часть кода оконной процедуры, которая позволяет пользователю рисовать линии в клиентской области окна путём перетаскивания мышки.

Когда оконная процедура получает сообщение WM_LBUTTONDOWN, то происходит захват мышки и сохранение координат курсора, используя их как начальную точку линии. При этом используется функция ClipCursor, чтобы ограничить перемещение курсора клиентской областью в процессе рисования.

В течение первого сообщения WM_MOUSEMOVE оконная процедура рисует линию от начальной точки до текущей позиции курсора. В течение последующих сообщений WM_MOUSEMOVE, оконная процедура стирает предыдущую линию путём рисования повёрх неё линии инверсного цвета. Затем снова рисуется линия от начальной точки до текущих координат курсора.

Поступление сообщения WM_LBUTTONUP сигнализирует об окончании рисования. Оконная процедура освобождает захват мышки и снимает ограничение движения мышки клиентской областью.

Обработка двойного щелчка

Чтобы получать сообщения о двойном щелчке (double-click messages), класс окна должен содержать стиль CS_DBLCLKS. Этот стиль устанавливается при регистрации оконного класса, как показано ниже.

Сообщение о двойном щелчке всегда предшевствует сообщению о нажатии кнопки.

Выделение строки текста

В данном разделе приведён пример, который был взят из обычного текстового редактора. Он включает код, позволяющий пользователю обычным щелчком устанавливать каретку в любом месте текста, а также выделять (подсвечивать) строку текста двойным щелчком.

Использование колеса мышки в документах с встраиваемыми объектами

В этом разделе представлен пример, демонстрирующий работу с документом Microsoft® Word, с различными встраиваемыми объектами:

  • Таблица Microsoft Excel
  • Элемент управления list box, который скроллируется в ответ на вращение колёсика
  • Элемент управления text box, который не реагирует на колёсико
Читайте также:  Почему флешка на телефоне перестала работать

Сообщение MSH_MOUSEWHEEL всегда посылается главному окну в Microsoft Word, даже если активна встраиваемая таблица экселя. Следующая таблица объясняет, как сообщение MSH_MOUSEWHEEL обрабатывается в ответ на изменение фокуса.

Фокус на Обрабатывается следующим образом
документе Word Word скроллирует окно документа.
внедрённой таблице Excel Word постит сообщение в Excel. Вы должны решить, должно ли внедрённое приложение реагировать на сообщение или нет.
внедрённом элементе управления Сперва приложение посылает сообщение внедрённому контролу, который имеет фокус, и проверяет код возврата, чтобы узнать, обработал ли это сообщение внедрённый элемент управления. Если элемент управления не обработал сообщение, то приложение начнёт скроллировать окно всего документа. Например, если пользователь кликает по списку (list box), а затем начинает вращать колёсико, то список будет скроллироваться в соответствии с вращением колеса. Если пользователь кликнет в текстовое окно, а затем будет прокручивать колёсико, то будет скроллироваться весь документ.

Следующий пример демонстрирует, как приложение может обработать два сообщения от колёсика.

Получаем количество строк, проскроллированных колесом мышки

Следующий пример, позволяет узнать количество проскроллированных строк. Для тех операционных систем, которые изначально поддерживают колёсико мышки, такие как Microsoft Windows NT® 4.0 и выше, рекомендуется использовать SystemParametersInfo.

Подскажите код в формате:

set_cursor(5,10);
cout Лучший ответ

Для винды:
#include
void gotoxy(short x, short y) <
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), (COORD));
>

Ещё проще:
#include
#define gotoxy(x, y) SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), (COORD))

Ссылка на основную публикацию
Узнать историю своих предков по фамилии
История собственной семьи вызывает интерес каждого человека. Слушая семейные легенды, люди нередко увлекаются судьбой своих предков, составляют генеалогическое дерево, стараясь...
Топ лучших видеокарт для игр
Видеокарты крайне быстро улучшаются, практически каждые полгода выходит видеоадаптер, значительно превосходящий предшественника. Активный прогресс обусловлен быстрым увеличением системных требований компьютерных...
Топ приложений для запоминания слов
Топ-8 приложений, где запоминать английские слова Приложения для изучения английских слов помогают быстро и эффективно пополнять словарный запас. Без работы...
Узнать откуда пришло заказное письмо по номеру
Многим гражданам периодически приходит корреспонденция, сопровождаемая извещениями, в которых содержится скудная информация, не дающая представления об отправителе. В случае невозможности...
Adblock detector