На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Console Input Buffer



Each console has an input buffer that contains a queue of input event records. When a console's window has the keyboard focus, a console formats each input event (such as a single keystroke, a movement of the mouse, or a mouse-button click) as an input record that it places in the console's input buffer.

Applications can access a console's input buffer indirectly by using the high-level console I/O functions, or directly by using the low-level console I/O functions. The high-level input functions filter and process the data in the input buffer, returning only a stream of input characters. The low-level input functions enable applications to read input records directly from a console's input buffer, or to place input records into the input buffer.
An input record is a structure containing information about the type of event that occurred (keyboard, mouse, window resizing, focus, or menu event) as well as specific details about the event. The EventType member in an INPUT_RECORD structure indicates which type of event is contained in the record.

Focus and menu events are placed in a console's input buffer for internal use by the system and should be ignored by applications.

Keyboard Events

Keyboard events are generated when any key is pressed or released; this includes control keys. However, the ALT key has special meaning to Windows when pressed and released without being combined with another character, and it is not passed through to the application. Also, the CTRL+C key combination is not passed through if the input handle is in processed mode.
If the input event is a keystroke, the Event member in INPUT_RECORD is a KEY_EVENT_RECORD structure containing the following information:

· A Boolean value indicating whether the key was pressed or released.
· A repeat count that can be greater than one when a key is held down.
· The virtual-key code, identifying the given key in a device-independent manner.
· The virtual-scan code, indicating the device-dependent value generated by the keyboard hardware.
· The translated Unicode™ or ANSI character.
· A flag variable indicating the state of the control keys (the ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK, and CAPS LOCK keys) and indicating whether an enhanced key was pressed. Enhanced keys for the IBM® 101-key and 102-key keyboards are the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad and the divide (/) and ENTER keys in the numeric keypad.



Mouse Events

Mouse events are generated whenever the user moves the mouse or presses or releases one of the mouse buttons. Mouse events are placed in the input buffer only if the following conditions are met:

· The console input mode is set to ENABLE_MOUSE_INPUT (the default mode).
· The console window has the keyboard focus.
· The mouse pointer is within the borders of the console's window.



If the input event is a mouse event, the Event member in INPUT_RECORD is a MOUSE_EVENT_RECORD structure containing the following information:

· The coordinates of the mouse pointer in terms of the character-cell row and column in the screen buffer's coordinate system.
· A flag variable indicating the state of the mouse buttons.
· A flag variable indicating the state of the control keys (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK, and CAPS LOCK) and indicating whether an enhanced key was pressed. Enhanced keys for the IBM 101-key and 102-key keyboards are the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad and the divide (/) and ENTER keys in the numeric keypad.

· A flag variable indicating whether the event was a normal button-press or button-release event, a mouse movement event, or the second click of a double-click event.



Note that the mouse position coordinates are in terms of the screen buffer, not the console window. The screen buffer may have been scrolled with respect to the window, so the upper left corner of the window is not necessarily the (0,0) coordinate of the screen buffer. To determine the coordinates of the mouse relative to the coordinate system of the window, subtract the window origin coordinates from the mouse position coordinates. Use the GetConsoleScreenBufferInfo function to determine the window origin coordinates.

The dwButtonState member of the MOUSE_EVENT_RECORD structure has a bit corresponding to each mouse button. The bit is 1 if the button is down and 0 if the button is up. A button-release event is detected by a 0 value for the dwEventFlags member of MOUSE_EVENT_RECORD and a change in a button's bit from 1 to 0. The GetNumberOfConsoleMouseButtons function retrieves the number of buttons on the mouse.

Buffer-Resizing Events

A console window's menu enables the user to change the size of the active screen buffer; this change generates a buffer-resizing event. Buffer-resizing events are placed in the input buffer if the console's input mode is set to ENABLE_WINDOW_INPUT (that is, the default mode is disabled).
If the input event is a buffer-resizing event, the Event member of INPUT_RECORD is a WINDOW_BUFFER_SIZE_RECORD structure containing the new size of the screen buffer, expressed in character-cell columns and rows.

If the user reduces the size of the screen buffer, any data in the discarded portion of the buffer is lost.
Changes to the screen buffer size as a result of application calls to the SetConsoleScreenBufferSize function are not generated as buffer-resizing events.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Консольный Входной Буфер



Каждая консоль имеет входной буфер, который содержит очередь входных записей случая. Когда консольное окно имеет клавишный фокус, консоль форматирует каждое входное событие (как например, единственное нажатие клавиши, перемещение мыши, или мышь-кнопка щелчка) как входная запись, которую она устанавливается в консольном входном буфере.

Приложения могут иметь доступ к консольному входному буферу косвенно используя высокоуровневые консольные функции В/В, или непосредственно используя низкий уровень консольных функций В/В. Высокоуровневый ввод функционирует фильтровать и обрабатывает данным в входном буфере, возврате только поток входных символов. Ввод низкого уровня функционирует допустимые приложения, чтобы читать входные записи непосредственно из консольного входного буфера, или, чтобы устанавливать входные записи в входной буфер.
Входная запись является структурой, содержащей информацию о типе события, что произойденное (клавиатура, мышь, менять размеры окна, фокуса, или событие меню), а также специфические детали о событии. Элемент EventType в структуре INPUT_RECORD указывает, что какой тип события содержался в записи.

Фокус и события меню установлены в консольном входном буфере для внутреннего использования системой и должно быть проигнорировано приложениями.

Клавишные События

Клавишные события сгенерированы когда любая клавиша нажата или выпущена; это включает управляющие клавиши. Тем не менее, клавиша ALT имеет специальное значение на Windows когда корреспондентский и выпущенный без объединенное другим символом, и это не пройдено вплоть до приложения. Также, ключевая комбинация CTRL+C не пройдена через если входная ручка - в обработанном режиме.
Если входное событие является нажатием клавиши, элемент События в INPUT_RECORD - структура KEY_EVENT_RECORD, содержащая следующую информацию:

Логическая величина, указывающая была нажата клавиша или была выпущена.
Счет повторения, который может быть больше, чем один когда клавиша придержана.
Виртуальный-ключевой код, опознающий данную клавишу в машинонезависимом способе.
Виртуальное сканирование кода, указывающее, что устройство-зависимая величина генерировалась клавишными аппаратными средствами.
Переведенный Уникод или символ ANSI.
Переменная флага, указывающая состояние управляющих клавиш ( ALT, CTRL, СДВИГ, БЛОКИРОВКА НОМЕРА, ПЕРЕМЕЩАТЬ БЛОКИРОВКУ, и клавиши БЛОКИРОВКИ КОЛПАЧКОВ) и указывая была нажата расширенная клавиша. Расширенные клавиши для IBM 101- клавиша и 102-ключевая клавиатура - INS, ДЕЛЬ, ДОМ, КОНЕЦ, СТРАНИЦА ПО, СТРАНИЦА ВНИЗ, и клавиши позиционирования в группах налево числовой вспомогательной клавиатуры и делить (/) и клавиши ВВОДА на числовой вспомогательной клавиатуре.



События Мыши

События Мыши сгенерированы всякий раз, когда пользователь перемещает мышь или нажимает или выпускает одну из кнопок мыши. События Мыши установлены в входном буфере только если следующие условия выполнены:

Консольный входной режим установлен на ENABLE_MOUSE_INPUT ( по умолчанию режим).
Консольное окно имеет клавишный фокус.
Указатель мыши - в пределах границ консольного окна.



Если входное событие является событием мыши, элемент События в INPUT_RECORD - структура MOUSE_EVENT_RECORD, содержащая следующую информацию:

Координаты указателя мыши с точки зрения символьной ячейки и столбца колонки в экранной буферной системе координат.
Переменная флага, указывающая состояние кнопок мыши.
Переменная флага, указывающая состояние управляющих клавиш (ALT, CTRL, СДВИГ, БЛОКИРОВКА НОМЕРА, ПЕРЕМЕЩАТЬ БЛОКИРОВКУ, и БЛОКИРОВКУ КОЛПАЧКОВ) и указывая была нажата расширенная клавиша. Расширенные клавиши для клавиши IBM 101-и 102- ключевая клавиатура - INS, ДЕЛЬ, ДОМ, КОНЕЦ, СТРАНИЦА ПО, СТРАНИЦА ВНИЗ, и клавиши позиционирования в группах налево числовой вспомогательной клавиатуры и делить (/) и клавиши ВВОДА на числовой вспомогательной клавиатуре.

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



Отметьте, что координаты позиции мыши - с точки зрения экранного буфера, не консольное окно. Экранный буфер возможно перемещен что касается окна, так что верхний левый угол окна не является обязательно (0,0) координатой экранного буфера. Для того, чтобы определять координаты мыши относительно системы координат окна, вычтите координаты начала окна из координат позиции мыши. Используйте функцию GetConsoleScreenBufferInfo, чтобы определять координаты начала окна.

Элемент dwButtonState структуры MOUSE_EVENT_RECORD имеет немного соответствуя на каждую кнопку мыши. Бит - 1 если кнопка - вниз и 0 если кнопка - по. Кнопка-версия события обнаружена 0 величиной для элемента dwEventFlags MOUSE_EVENT_RECORD и изменения на бите кнопки от 1 до 0. Функция GetNumberOfConsoleMouseButtons извлекает количество кнопок на мыши.

СОБЫТИЯ Buffer-Resizing

Консольное меню окна позволяет пользователя, чтобы изменять размер активного экранного буфера; это изменение генерирует буферное менять размеры события. Буферное менять размеры событий установлены в входном буфере если консольный входной режим установлен на ENABLE_WINDOW_INPUT (то есть, по умолчанию режим выведен из строя).
Если входное событие является буферным менять размеры события, элемент События INPUT_RECORD является структурой WINDOW_BUFFER_SIZE_RECORD, содержащей новый размер экранного буфера, выраженного в символьной ячейке и колонках столбцов.

Если пользователь уменьшает размер экранного буфера, любые данные в сброшенной части буфера потерены.
Изменения в экранный буферный размер в результате прикладных вызовов в функцию SetConsoleScreenBufferSize не сгенерированы как буферное менять размеры событий.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz