Re[2]: Как отловить передвижение мыши над Static Text в ATL
От:
Аноним
Дата:
17.12.03 09:46
Оценка:
Здравствуйте, RomeoMontekky, Вы писали:
RM>Здравствуйте, Аноним, Вы писали:
А>>Люди, помогите пожалуйста. Эта ATL меня скоро доканает. А>>У меня ATL Dialog. На нем Static Text. Хочу сделать, чтобы когда курсор мыши проходит над Stztic Text он (курсор мыши) изменял свой вид. Никак не могу понять. У диалога есть обработчик сообщения OnMouseMove, но, когда мышь проходит над Static Text, этот обработчик не получает сообщений. Как быть?
А>>Александр
RM>Ловить WM_MOUSEMOVE нужно не в паренте. Нужно создать свой класс, например так:
RM>class CMyStaticClass : public CWindowImpl<CMyStaticClass> RM>{ RM> ... RM>};
RM>В класс нужно добавить message handler WM_MOUSEMOVE, в котором и написать весь необходимый код, или переслать сообщение парену, если уж очень хочется, чтобы обработка происходила в нём. RM>Затем обрабатываем сообщения WM_INITDIALOG нашего парент-диалога. В нём используем сабклассинг.
RM>CMyStaticClass * myStatic = new CMyStaticClass(this); RM>myStatic->SubclassWindow(GetDlgItem(IDC_MY_STATIC)); RM>myStaic->ShowWindow(SW_SHOW);
RM>Теперь ты можешь обращаться к myStatic, как к обычному окну, к тому же при наведении на него мышки он будет реагировать вполне адекватно. Ну и не стоит забывать, что IDC_STATIC нужно с самого начало переименовать в IDC_MY_STATIC, иначе компилятор ресурсов не сможет отличить его от "системного" статика, к которому обращаться нельзя в силу Windows-идеологии...
RM>Удачи!
Большое СПАСИБО, работает! Ларчик-то, оказывается, просто открывался.