ActiveX + Dll + PreTranslateMessage.
От: Аноним  
Дата: 01.12.03 16:44
Оценка:
Здравствуйте.
Столкнулся со следующей проблемкой:
Забацал на ВБ АктивХ с кучкой DbGrid-ов.
В тестовых проэктах (на ВБ и на С++) все работает хорошо.

Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.
Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...
Может кто-нибудь уже сталкивался с этим и знает как это побороть...
Причем все дело именно в DataGride (так как ОСХ с FlexGrid работает (правда там мне ручками пришлось ЕдитВох вставлять в нужную ячейку и соответствкенно все KeyUp/KeyPress в ОСХ обрабатывать, а тут этот Грид сам все делает...)
Уточнение: OCX на самом деле не в простом диалоге а в PropertyPage. Но вряд ли это имеет значение...
Спасибо всем кто попытался вникнуть и большое спасибо тем кто что-то сможет посоветовать...
Виктор
Re: ActiveX + Dll + PreTranslateMessage.
От: KGP http://kornilow.newmail.ru
Дата: 02.12.03 06:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.

Это как ... неработают ?
А>Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...
Не пойму, зачем нажатие (левой кнопки мыши) курсора отсылать в OCX ?
Он сам не реагирует разве на нажатие ? не ловит их ?
... << RSDN@Home 1.1 beta 2 >>
Re: ActiveX + Dll + PreTranslateMessage.
От: algol Россия about:blank
Дата: 02.12.03 07:01
Оценка:
Здравствуйте, Аноним, Вы писали:

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

А>Столкнулся со следующей проблемкой:
А>Забацал на ВБ АктивХ с кучкой DbGrid-ов.
А>В тестовых проэктах (на ВБ и на С++) все работает хорошо.

А>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.


Если DbGrid написан на ATL, то возможная причина описана в Q232624 .
Re[2]: ActiveX + Dll + PreTranslateMessage.
От: Аноним  
Дата: 02.12.03 15:12
Оценка:
Здравствуйте, KGP, Вы писали:

KGP>Здравствуйте, <Аноним>, Вы писали:



А>>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.

KGP>Это как ... неработают ?
Стрелки вправо/влево/вверх/вниз не позволяют передвигаться по ячейкам... Причем влево и вправо работают только в пределах ячейки. В то же время в тестовом проектк все тип-топ....
А>>Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...
KGP>Не пойму, зачем нажатие (левой кнопки мыши) курсора отсылать в OCX ?
А про мишь никто не говорил. Кстати на правую кнопку в ОСХ навешено меню и все отлично работает.
Re[2]: ActiveX + Dll + PreTranslateMessage.
От: Аноним  
Дата: 02.12.03 15:20
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


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

А>>Столкнулся со следующей проблемкой:
А>>Забацал на ВБ АктивХ с кучкой DbGrid-ов.
А>>В тестовых проэктах (на ВБ и на С++) все работает хорошо.

А>>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.


A>Если DbGrid написан на ATL, то возможная причина описана в Q232624 .

Да откуда ж я знаю на чем этот DbGrid (.../system32/MSDATGRD.ocx) написан. Да и как мне поможет это знание — Microsoft не поставляет исходников
Я то понимаю что это в самом DbGrid не происходит передача мессажа от EditBox ячейки в сам Grid... Но как это обойти , вот в чем вопрос...
Re: ActiveX + Dll + PreTranslateMessage.
От: Vladimir Labor  
Дата: 11.06.04 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.


Почитай здесь: http://rsdn.ru/Forum/Message.aspx?mid=456352&amp;only=1
Автор: PablikNet
Дата: 26.11.03


А>Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...


Вроде все правильно. Только попробуй посылать сообщения не OCX контролу а конкретному гриду, в котором нужна навигация.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.