Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание ActiveX, проблемы с мышкой 
V
    Опции темы
PRIZRAK001
Дата 6.12.2006, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Здравствуйте.

Мне нужно создать ActiveX-компонент (визуальный контрол), который бы реагировал на действия мыши. 

Проблема в том, что мой компонент реагирует на действия мыши только, когда загружен в ActiveX Control Test Container, и не реагирует, когда находиться на диалоге. Т.е. когда я его тестирую в ActiveX Control Test Container, то всё ОК, а когда запускаю приложение MFC с этим контролом, то всё перестаёт работать.

Я новичок в MFC и ActiveX. В чём проблема? Разъясните, пожалуйста.

На простом примере я поясню, как всё делаю. Использую Visual Studio 6.

Создаю проект MFC ActiveX Control Wizard. Компонент наследую от STATIC. Свойства компонента приведены на скриншоте.

user posted image

С помощью мастера делаю обработку сообщения от мыши.

user posted image

Пишем код обработчика.

Код

void CMyControl_003Ctrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
    ::MessageBox(NULL, _T("OnLButtonDown"), _T("CMyControl_003Ctrl"), MB_OK);
    
    COleControl::OnLButtonDown(nFlags, point);
}


Компилируем. Открываем ActiveX Control Test Container. Загружаем наш компонент. Нажимаем на него левой кнопкой мыши - получаем сообщение:

user posted image

Закрываем проект. Создаем новый проект MFC AppWizard (exe). Свойства проекта приведены на скриншоте

user posted image

Кладем на диалог наш компонент. Компилируем, запускаем. Нажимаем по контролу левой кнопкой мышки - ничего не происходит.

user posted image
PM   Вверх
PRIZRAK001
Дата 8.12.2006, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Разобрался!

Поскольку я наследовал от STATIC, то  для того чтобы компонент реагировал на действия мыши, необходимо добавить стиль SS_NOTIFY.

Код
BOOL CMyControl_003Ctrl::PreCreateWindow(CREATESTRUCT& cs)
    {
    cs.lpszClass = _T("STATIC");
    cs.style |= SS_NOTIFY;    
    return COleControl::PreCreateWindow(cs);
    }

Тема закрыта. 

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0392 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.