
- •1. Windows-как объектно-ориентированная операционная система (трпс)
- •2. Общая схема взаимодействия приложения и ядра Windows. (трпс)
- •3. Общая схема Windows приложения. Цикл обработки сообщения, функция окна, ресурсы. (трпс)
- •4. Синхронные и асинхронные Windows сообщения. Сходства и отличия. Области применения. (трпс)
- •5. Классы и стили окон. Иерархия окон. (трпс)
- •6. Особенности отрисовки для Windows приложения. Контекст устройства, недействительная область, обработка сообщений. (трпс)
- •7. Типы клавиатурных сообщений. Особенности обработки. (трпс)
- •8. Типы сообщений от манипулятора мышь. Особенности обработки. (трпс)
- •9. Реализация корпоративной и вытесняющей многозадачности на Windows платформах. (трпс)
- •10. Основные понятия процесса, потока, фибера (трпс)
- •11. Схема создания рабочего потока (трпс)
- •12. Синхронизация потоков, события, критические секции. (трпс)
- •13. Особенности использования памяти на Windows платформах. Проблема ipc (трпс)
- •14. Общая схема печати документов приложением на Windows платформах. (трпс)
- •2 Создание немодального диалога для отмены печати.
- •16. Типы и области применимости dll. Особенности программной реализации. (трпс)
- •17. Наборы символов для Windows платформ. Сходства и отличия. Области применимости. (трпс)
- •18. Типы диалогов для Windows платформ. Сходства и отличия. Особенности реализации. (трпс)
- •Int DialogBox(hinstance hInst,lpctstr pTemplate, hwnd hWndParent, dlgproc pDlgFunc)
- •Int MessageBox(hwnd hWnd, lpctstr szText, lpctstr szCaption, uint uType);
- •If (!IsDialogMessage(hDlgModaless,&msg)){
- •19. Элементы управления. Общая характеристика и области применимости. (трпс)
- •20. Функции crt и функции ядра Windows для работы с файлами. Особенности применения. (трпс)
7. Типы клавиатурных сообщений. Особенности обработки. (трпс)
Сообщения, которые приложение получает от Windows о событиях, относящихся к клавиатуре, различают на аппаратные и символьные, т.к. клавиатуру можно рассматривать как набор клавиш, а во-вторых клавиатура является устройством ввода, генерирующим отображающие символы.
Когда пользователь нажимает клавишу, Windows помещает в очередь окна, имеющего фокус ввода, либо сообщение WM_KEYDOWN, либо сообщение WM_SYSKEYDOWN. Когда же клавиша отпускается, Windows посылает в очередь либо сообщение WM_KEYUP, либо сообщение WM_SYSKEYUP. Cообщения WM_KEYDOWN и WM_KEYUP – это несистемные аппаратные сообщения, Обычно сообщения о нажатии и отпускании появляются парами, но если пользователь оставит клавишу нажатой тогда Windows посылает оконной функции серию сообщений WM_KEYDOWN или WM_SYSKEYDOWN и только одно сообщение WM_KEYUP или WM_SYSKEYUP, когда клавиша всё таки окажется отпущенной. Аппаратные сообщения клавиатуры являются асинхронными сообщениями, и становятся в очередь сообщений. WM_SYSKEYUP и WM_SYSKEYDOWN – системные аппаратные сообщения более важны для Windows, чем для приложений. Эти сообщения генерируются при нажатии клавиш в сочетании с клавишей <Alt>.. Программы обычно игнорируют системные аппаратные сообщения и передают их в функцию DefWindowProc(). Для того, чтобы сообщения клавиатуры появились в очереди сообщений окна нужно дополнить цикл обработки сообщений приложения функцией TranslateMessage(). Данная функция преобразует аппаратные сообщения клавиатуры в символьные сообщения в соответствии с состоянием драйвера клавиатуры, а также положением управляющих клавиш <Shift> и <CapsLock>. Именно благодаря TranslateMessage(), в очереди сообщений появляются символьные сообщения. Символьное сообщение всегда будет следующим, после сообщения о нажатии клавиши, которое функция GetMessage() извлечет из очереди.
Существует 4 типа символьных сообщений – WM_CHAR и WM_DEADCHAR относятся к несистемным и приходят вслед за WM_KEYDOWN. Сообщения WM_SYSCHAR и WM_SYSDEADCHAR являются системными и вызваны появлением сообщения WM_SYSKEYDOWN. Для сообщения WM_CHAR параметр wParam содержит ANSI-код нажатой клавиши. lParam – содержит число повторов, генерируемых при удержании клавиши в нажатом состоянии.
Некоторые приложения могут иметь больше одного окна, и клавиатура должна разделяться между этими окнами в рамках одного и того же приложения. Когда на клавиатуре нажата клавиша, только одна оконная процедура может получить сообщение об этом. Окно, которое в настоящее время получает все клавиатурные сообщения, именуется окном, имеющим фокус ввода. Концепция фокуса ввода тесно связана с концепцией активного окна. Окно, имеющее фокус ввода – это либо активное окно, либо дочернее окно активного окна
8. Типы сообщений от манипулятора мышь. Особенности обработки. (трпс)
Сообщения делятся на: сообщения в клиентской части окна и сообщения вне клиентской области окна.
Сообщения клиентской части окна (например WM_LBUTTONDOWN) формируются когда события происходят над клиентской частью окна. Параметр lParam этих сообщений означает координаты курсора относительно клиентской части окна. Параметр wParam содержит флаги, определяющие состояние кнопок мыши и клавиш CTRL и SHIFT.
Сообщения неклиентской части окна формируются когда события происходят над окном вне клиентской его части. Windows генерирует эти сообщения в основном для её собственного использования. Названия сообщений такие же, как и в клиентской части, но добавляются ещё буквы NC (например WM_NCLBUTTONDOWN). Параметр lParam этих сообщений означает координаты курсора относительно экрана. Параметр wParam содержит информацию о том, в какой именно области неклиентской части окна сформировалось данное сообщение.
WM_MOUSEACTIVATE сообщение посылается, когда курсор находится в бездействующем окне, и пользователь нажимает кнопку мыши. Родительское окно получает это сообщение только, если дочернее окно не обрабатывает его.
WM_MOUSEMOVE сообщение поступает, когда курсор переместился. Если мышь не зафиксирована, сообщение отправлено к окну, которое содержит курсор. Иначе, сообщение отправлено к окну, которое фиксировало мышь. X= LOWORD (lParam);y= HIWORD (lParam);
WM_RBUTTONDOWN сообщение, когда пользователь нажимает правую кнопку мыши, в то время как курсор находится в области клиента окна. Если мышь не зафиксирована, сообщение отправлено к окну ниже курсора. Иначе, сообщение отправлено к окну, которое фиксировало мышь.
WM_RBUTTONUP сообщение отправлено, когда пользователь выпускает правую кнопку мыши, в то время как курсор находится в области клиента окна. Если мышь не зафиксирована, сообщение отправлено к окну ниже курсора. Иначе, сообщение отправлено к окну, которое фиксировало мышь. WM_LBUTTONDOWN, WM_LBUTTONUP
WM_NCMOUSEMOVE – сообщение поступает когда курсор мыши перемещается в неклиетской (нерабочей) области окна.
По поводу двойного щелчка мыши – необходимо в стилях класса установить макрос CS_DBLCLKS в этом случае приложение будет получать сообщение WM_LBUTTONDBLCLK