Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 139


Для того чтобы отобразиться, окно подсказки должно получить сооб­щение от мыши. Так как Windows посылает сообщения только тому окну, поверх которого находится курсор, программа должна использовать сообщение TTM_R.ELAYEVENT для того чтобы транслировать сообще­ние окну подсказки. wParam этого сообщения должен быть равным нулю, a IParam должен содержать указатель на структуру типа MSU, в которой хранится информация о транслируемом сообщении. При этом необходи­мо учесть, что окно подсказки обрабатывает информацию только о сообщениях, приведенных ниже: WM IJiUTTONDOWN;

" WM LBUTTONUP;

* WM]MUUTTONI)OWN: ]WM MBUTTONUP;

* WM^MOUSEMOVF;

* WM RBUTTONDOWN;

* WM RBUTTONUP.

Если инструмент представляет собой прямоугольную часть окна, то тогда никаких сложностей не появляется. Если же инструмент является системным окном (таким, например, как кнопка), то в этом случае возни­кают определенные трудности. Программа должна будет или перехваты­вать сообщения посредством использования hook'oB, или подменить оконную функцию системного окна (осуществить subclassing). К сожале­нию, рассмотрение вопросов, связанных с поок'амн и subclassing'oM выходит за рамки этой книги, поэтому я вынужден буду остановиться только на подсказках, связанных с областью окна. Уважаемый читатель!

166

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

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

При работе окно подсказки использует три определенных временных интервала. Первый из них, называемый интервалом инициализации, определяет период, в течение которого курсор должен находиться в пределах интересующей области для того, чтобы отобразилась закладка. Второй - интервал повторного отображения - определяет задержку между последовательными отображениями окна подсказки в тех случаях, когда курсор скользит по инструментам, например, по панели инструментов. Третий интервал - интервал отображения - определяет время, в течение которого подсказка находится на отображении в тех случаях, когда курсор находится внутри интересующей области или в преде­лах границы инструмента. Все чти периоды могут быть определены с помощью сообщения ТТМ SETDELAYT1ME. wParam этого сообще­ния определяет, какой интервал устанавливается. IParam определяет длительность интервала в миллисекундах. Допустимые значения wParam приведены в табл. 40.




Начало  Назад  Вперед



Книжный магазин