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