Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 324
от 17.10.2006, 20:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 378, Экспертов: 38
В номере:Вопросов: 1, Ответов: 2


Вопрос № 58655: Здравствуйте, уважаемые эксперты. Пишу в эту рассылку и в СС++ Есть окно (диалог), при инициализации создаю в нем несколько дочерних кнопок. 1) Как заставить дочерние button`ы отсылать сообщения родительскому окну, от том что на нее - кн...

Вопрос № 58.655
Здравствуйте, уважаемые эксперты.
Пишу в эту рассылку и в СС++
Есть окно (диалог), при инициализации создаю в нем несколько дочерних кнопок.
1) Как заставить дочерние button`ы отсылать сообщения родительскому окну, от том что на нее - кнопку - навели мышь, увели мышь, левой (правой) кнопкой мыши щелкнули по button`у.
Нужно сделать чтобы родительское окно (диалог), могло обрабатывать сообщения от дочерних button`ов. Какие сообщения дожно отрабатывать родительское окно (диалог)?
2) Как зная ID кнопки, заставить ее сменить цвет с умолчательного на желты(любой другой) и обратно.

Пожалуйста приведите примеры.
Пишу под Windows на VC7
Отправлен: 12.10.2006, 12:41
Вопрос задал: Zeitgeist (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Sergey A. Wedensky
Здравствуйте, Zeitgeist!

1) Сообщение о нажатии кнопки приходит родительскому окну в виде
WM_COMMAND с WPARAM = MAKELONG(BN_CLICKED, идентификатор_кнопки).
Получить уведомления о наведении и пр. Вам так просто не удастся.
Обычно переопределение поведения контролов осуществляется с помощью
субклассинга (см. MSDN, напр. 'Safe Subclassing in Win32' и далее по
ссылкам), т.е. наследования оконной процедуры.
Можно, правда, обрабатывать WM_SETCURSOR (оно приходит родительскому
диалогу даже при движении мыши по дочерним контролам).
2) Заменить цвет фона (и не только) контрола можно обрабатывая WM_CTLCOLORXXX. Для
кнопки это будет WM_CTLCOLORBTN:
WPARAM = DC (контекст окна), которому Вы можете, например, установить
цвет для вывода текста (SetTextColor) и пр.
LPARAM = HWND кнопки.
Вернуть Вы должны HBRUSH - handle кисти, которой будет
отрисовываться фон кнопки.

Но если Вы хотите переопределить вид и поведение стандартных элементов управления
(сделать их активными, реагирующими на наведение/отведение мыши,
нестандартно отрисовывающимися и т.д.), советую все-же
поинтересоваться subclassing'ом.
Ответ отправил: Sergey A. Wedensky (статус: 5-ый класс)
Ответ отправлен: 12.10.2006, 13:07

Отвечает: Melamed
Здравствуйте, Zeitgeist!
Чтобы отсылать сообщение родительскому окну, когда на кнопку навели мышь, необходимо написать потомок от класса CButton. Он должен обрабатывать событие WM_MOUSEMOVE.
Чтобы отловить событие увода вможно либо захватить мышь, и отслеживать увод курсора мыши с кнопки, не забыв при первом уводе курсора мыши послать сообщение к родите 83;ьскому окну и отменит захват мыши, либо использовать таймер. Так как я стороник первого способа, то в приложении приведе пример реализации этого способа.

При реализации обеих способов надо обработать пользовательские события UM_MOUSEENTRY и UM_MOUSELEAVE. Обработчики этих сообщений присоединяются в карте сообщений с помощью макроса ON_MESSAGE

Приложение:

Ответ отправил: Melamed (статус: 6-ой класс)
Ответ отправлен: 12.10.2006, 14:17


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное