За этим стоит ряд связанных понятий.
На очень низком уровне клавиатура и мышь являются аппаратными устройствами, которые генерируют некоторые " прерывания " (в формеэлектрические сигналы) к процессору.Операционная система предоставляет некоторые драйверы , которые обрабатывают такие прерывания, декодируя специальный протокол связи устройства и "стандартизируя" (на уровне ОС) эти сигналы в виде событий .
В «консольных приложениях» операционная система обрабатывает эти события (в частности, клавиатуру), заполняя входной буфер (по существу, char []), который становится доступным как «практически бесконечная последовательность символов» (сложное имядля «файла») с именем «CON», таким образом имитируя «модель бесконечного телетайпа» компьютеров первых дней.В программе на C ++ стандартная библиотека - при запуске программы - связывает с этим «файлом» объекты std::cin
и std::cout
stream , поэтому вы можете прочитать входную последовательность символов с помощью функций std::istream
и операторы.
К сожалению, в случае с «графическими приложениями» не существует «модели ранних дней» для имитации, и «события» остаются доступными в качестве собственной структуры операционной системы.Различные операционные системы отличаются тем, как такие события представляются и обрабатываются, но можно увидеть определенное сходство.Для Windows (поскольку ваш вопрос о том, что), типичная программа извлекает эти события в последовательности с «циклом сообщений», в котором вызывают определенные API-интерфейсы ОС.В этом цикле типичная программа также будет вызывать API-интерфейс другой ОС для отправки этого события в соответствующую процедуру «обратного вызова», связанную с ранее созданным «окном».Эта процедура обратного вызова должна обнаружить код события, привести соответствующий параметр и управлять им, выполнив требуемое действие.
Более точные детали можно увидеть в руководстве по программированию WIN32, например http://www.winprog.org/tutorial/. Наиболеекода по сути C, так как C является языком, API-интерфейс формализован.Для C ++ было написано несколько библиотек, представляющих объекты ОС в форме классов C ++ и отображающих API-интерфейсы ОС для этих классов.Эти библиотеки могут быть либо специфичными для ОС (например, MFC, WTL ...) или «мультиплатформенными» (они существуют в разных версиях, отображающих API разных ОС в один и тот же интерфейс C ++), например WxWidget, Qt, Gtk, Fltk...
Надеюсь, это даст вам больше советов для размышлений.