Воскресенье, 05.05.2024, 05:06
GAMESTROYГлавная

Регистрация

Вход
Приветствую Вас Гость | RSS
Меню сайта
Наш опрос
Игры какого жанра вы предпочитаете делать?
Всего ответов: 68
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Краткие ответы на контрольные вопросы:

1. Что такое процесс и нить? В чем их отличие?

Процесс – это контейнер для набора ресурсов, используемых для выполнения экземпляра программы.

Нить – это последовательность выполнения команд программы в рамках процесса.

Их отличие состоит в том, что процесс содержит в себе, как минимум, одну нить, в то время как, нити могут использовать все ресурсы процесса.

2. Система, управляемая событиями -  система, в которой работа прикладных программ строится в виде реакции программы на определенный набор событий.

3.  Какую информацию содержит сообщение в Windows?

·         Хэндл окна

·         Идентификатор сообщения

·         Дополнительная информация к сообщению

·         Время посылки

·         Положение курсора

4. Каковы основные источники сообщений?

·         Движение мыши

·         Нажатие клавиши

·         Срабатывание таймера

·         т.е. любые изменения в состоянии системы и внешних устройств.

5. На какие группы можно разделить сообщения от клавиатуры?

·         сообщения о нажатии/отпускании клавиши WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN и WM_SYSKEYUP.

·         сообщения о введенном символе: WM_CHAR и WM_SYSCHAR.

6. Какие сообщения посылает мышь?

Наиболее важными являются сообщения о нажатии, отпускании и двойном щелчке кнопок мыши в пределах активного окна: WM_xBUTTONDOWN, WM_xBUTTONUP, WM_xBUTTONDBLCLK.

А также WM_MOUSEMOVE – сообщение о перемещении курсора мыши.

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

WM_NCHITTEST - cистема запрашивает у окна, на какой части неклиентской области находится курсор.

7. Какие сообщения получает окно при создании?

WM_CREATE - это сообщение содержит информацию о параметрах окна.

WM_SIZE - сообщает окну его текущий размер, и WM_MOVE - содержит текущие координаты окна.

WM_SHOWWIN - переводит окно в видимое состояние.

8. Что означает префикс NC в именах сообщений?

Этот префикс расшифровывается как "non-client” и посылается системой в тех случаях, когда соответствующее сообщение касается неклиентской части окна, включающей рамку, заголовок, меню.

9. Какие сообщения сопровождают смену активного окна?

WM_ACTIVATE, WM_KILLFOCUS, WM_SETFOCUS, WM_ACTIVATEAPP - одно приложение перестает быть активным, а другое, наоборот, активизируется.

10. Что такое сообщение WM_COMMAND?

Сообщение WM_COMMAND генерируется при подаче команды с помощью меню, комбинации клавиш или командной кнопки.

11. В каких случаях подается сообщение WM_SYSCOMMAND?

Окно получает это сообщение, когда пользователь выбирает команду из меню окна (известное также как Системное меню или Меню управления) или когда пользователь выбирает кнопку Развернуть (Maximize) или кнопку Свернуть (Minimize).

12. Какие сообщения получает окно при закрытии?

Когда пользователь закрывает окно приложения, окно получает сообщение WM_CLOSE. В ходе обработки этой команды генерируется и обрабатывается еще ряд сообщений: WM_WINDOWPOSCHANGING и WM_WINDOWPOSCHANGED (теперь позиция окна будет «никакая»), WM_ACTIVATE (окно перестает быть активным), если это последнее окно приложения – WM_ACTIVATEAPP (умирающее приложение перестает быть активным). Одно из последних сообщений, которые достигают окна ­– WM_DESTROY, которое посылается уже после того, как окно убрано с экрана. Если данное окно имеет дочерние окна, то они также получают сообщение WM_DESTROY. Сообщение WM_QUIT вызывает завершение цикла приема сообщений и оконной функции уже не передается.

13. В каких случаях подается сообщение WM_PAINT?

Это сообщение возникает в тех случаях, когда система обнаруживает, что часть области окна должна быть перерисована заново (например, эта часть ранее была закрыта другими окнами) или же пользователь явно указывает на необходимость такой перерисовки ввиду изменения содержимого окна

14. В каких случаях подается сообщение WM_TIMER?

Это сообщение генерируется, если данная нить установила таймер с помощью функции SetTimer, и для этого таймера истек заданный интервал времени.

15. Какие идентификаторы может пользователь присваивать своим сообщениям?

С 0х0400 (константа WM_USER) до 0x7FFF – пользовательские сообщения, которые определяются в приложении и используются для обмена сообщениями между окнами этого приложения.

С 0х8000 (константа WM_APP) до 0xBFFF – в Windows версии NT 4.0 и выше данный диапазон также отведен для пользовательских сообщений.

16. Каково назначение цикла приема сообщений?

Цикл приёма сообщений в windows необходим при обработке n-го количества сообщений.

Он начинает работу после инициализации и продолжается до завершения работы нити.

[При использовании современных систем программирования (Delphi, Visual C++ и т.п.) цикл приема сообщений может оказаться скрытым от пользователя в теле методов системных классов, однако он тем не менее существует.]

 

17. В чем назначение функции TranslateMessage?

Отвечает за сообщения о введённом символе: WM_CHAR и WM_SYSCHAR.

Эти сообщения генерируются функцией TranslateMessage на основании анализа «что было нажато/отпущено»

18. В чем назначение функции DispatchMessage?

Функция DispatchMessage(msg) выясняет, какому из окон данной нити адресовано сообщение, вызывает оконную функцию данного окна для обработки сообщения и передает в нее структуру сообщения msg.

19. Как отличаются сообщения, посланные нити, от сообщений, посланных окнам нити?

Если сообщение послано не окну, а самому процессу (точнее, одной из его нитей), то значение hwnd (хэндл окна) устанавливается равным NULL.

 

20. Чем различаются функции GetMessage и PeekMessage?

Вместо GetMessage может также использоваться функция PeekMessage, основное отличие которой заключается в том, что она позволяет только проверить наличие сообщений, не выполняя ожидание в случае их отсутствия.

21. Как приложение может узнать время и координаты, связанные с сообщением?

При помощи посылки сообщений wm_nchitest и wm_timer.

22. Что делает функция WaitMessage?

Эта функция просто проверяет, имеется ли в очереди к данной нити какое-либо сообщение, которое могла бы принять функция GetMessage.

23. Что такое оконная функция?

Это функция, главная задача которой является обработка сообщений, адресованных окну, для которого она определена.

24. Чем отличается оконная функция диалогового окна?

Оконная функция для диалоговых окон отличается тем, что возвращать должна булевское значение TRUE для обработанных сообщений и значение FALSE для сообщений, обработка которых перепоручается системе.

25. Чем различаются синхронный и асинхронный способы посылки сообщений?

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

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

26. В каком порядке выбираются для обработки разные типы сообщений?

Сначала идёт обработка синхронных сообщений при вызове нитью функцию GetMessage.

Следующими кандидатами на обработку являются асинхронные сообщения, при вызове функции postmessage.

27. Что такое виртуальная очередь ввода?

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

28. Какие функции используются для асинхронной посылки сообщений?

BOOL PostMessage - асинхронная посылка сообщения окну

BOOL PostThreadMessage - асинхронная посылка сообщения для нити

29. Какая функция используется для синхронной посылки сообщений?

LRESULT SendMessage - синхронная посылка окну или нити

30. Чем различается обработка синхронных сообщений от нити, владеющей окном, и от других нитей?

31. До каких пор нить, пославшая синхронное сообщение, остается заблокированной?

До тех пор, пока не обработается сообщение.

32.  Какую роль играет функция ReplyMessage?

«Пусть я еще не все сделала, но с оставшейся работой справлюсь сама, не стойте над душой»

33. Как оконная функция может отличить синхронное сообщение от асинхронного?

Тип LRESULT определен как целое число со знаком. Возвращаемое значение может иметь различный смысл в зависимости от типа сообщения.  

34. Как устраняется опасность блокировки нити-отправителя при некорректной работе нити-получателя синхронного сообщения?

Работа нити-отправителя блокируется до наступления одного из двух событий:

·         выполнение вызванной оконной функции завершается;

·         оконная функция вызывает функцию ReplyMessage (означающую примерно следующее: «Пусть я еще не все сделала, но с оставшейся работой справлюсь сама, не стойте над душой»).

 

35. Какие основные возможности предоставляет программа Spy++?

Spy++ – это программа, позволяющая получить в наглядном виде информацию о всех процессах в системе, нитях процессов и окнах, а также дающая возможность отслеживать поток сообщений.

36. Как узнать хэндл окна, видимого на экране?

Есть также возможность определить хэндл окна по координатам точки на экране.

37. Как найти на экране окно, зная его хэндл?

Зная хэндл окна – номер, можно найти окно.

38. Какие свойства отображаются для окна?

Для окна отображается большое количество информации о его размерах, заголовке, стилях, классе, родительском окне, первом из дочерних окон, «братских» окнах, окне-владельце, а также о процессе и нити, которым принадлежит окно.

39. Какие свойства отображаются для сообщения?

Свойства сообщения включают хэндл окна-приемника, уровень вложенности (т.е. окно верхнего уровня или дочернее), тип сообщения, способ посылки (Sent или Posted), а также значения параметров. Для большинства типов сообщений система пытается также расшифровать смысл параметров wParam и lParam в соответствии с описанными в документации по Windows структурами данных.

40. Как выбрать окно для отслеживания сообщений?

·         Выполнив Spy + LogMessages, откроется диалоговое окно. Выбрать конкретное окно можно, перетащим Finder Tool на него.

·         Если окно выделено в списке окон и при этом является видимым, то можно найти его на экране с помощью команды контекстного меню Highlight. Граница окна будет мерцать в течение нескольких секунд.

 

41. Как отследить сообщения для двух окон?

Для отслеживания сообщений, адресованных нескольким окнам, нужно поставить галочку на дополнительном окне. То есть открыв «Мой компьютер», затем какую-либо папку этого каталога, и отметив галочкой в LogMessages "Дочерние окна”, можно отслеживать поток сообщений для этих окон.

Поиск
Пожертвование
Дорогие посетители , внесите пожертвование в развитие нашего проекта.
Благодарим Вас
WMZ
Реклама
Партнерская программа 1PS.RU Онлайн казино Nirvana
Наш возраст
DiMENTOR Studio © 2024Бесплатный конструктор сайтов - uCoz