Re: Как превратить win32 приложение в ActiveX c окном ?
От: Виталий Россия  
Дата: 18.01.05 16:17
Оценка:
Здравствуйте, vis_de, Вы писали:

_>Проблема следующая — есть Win32 приложение не использующее ни MFC ни ATL-WTL.

_>Из него хотелось бы создать ActiveX control (используя ATL, так как в другом месте проэкта этот контрол должен хоститься конструкцией типа
_>CreateWindow("AtlAxWin", ..... ) ).
_>Т.е необходимо что-бы для начала можно было просто запустить этот созданный из Win32 приложения ActiveX в окне основного проэкта.
_>Ну а затем уже добавить пару методов которые бы передавали или возвращали некоторые результаты.

_>Реально ли это сделать и насколько сложно?

_>Есть ли где-то пошаговые инструкции для такого типа задач? (не думаю что я первый)
_>Можно ли это реализовать при помощи ATL или есть еще более простой вариант?
Можно, даже не очень-то и сложно

_>Интересует литература и/или конкретные рекомендации.

_>C ATL я сейчас только начал разбираться такчт любые рекомендации очень-очень welcome
Вкратце так (в расчете на VC .NET, как в 6 уже не помню, но что-то близкое):
— создаем новый ATL проект, потом добавляем в него новый объект (через Add Class -> Atl Object).
Объект выбираем на основе какого-нибудь виндового контрола, например STATIC.

— в сгенеренном коде ищем функцию OnCreate. В ней можно использовать свой код для создания окна. Будет переменная навроде m_ctlStatic, ее можно создать или отсабклассить — уже по выбору.
HWND родителя доступно через m_hWnd.

— ищем функцию SetObjectRects, она вызавается при изменении размеров контрола, нужно адекватно отреагировать.
— ищем функцию OnSetFocus, из названия понятно, когда вызывается, обычно сгенеренного кода достаточно, но может понадобиться и подправить
— ну и в PreTranslateAccelerator можно обработать клавиатуру

Да, если нужно задавать начальный размер ActiveX, то делать это удобнее всего в конструкторе, есть такой мембер — m_sizeExtent типа SIZE. нужно только учитывать что размер задается не в пикселах, а в HIMETRIC units, каждый 0.01 миллиметра, насколько я помню. Если нужно в пикселах, то поможет AtlHiMetricToPixel.

Вроде как все Имхо, проще вряд ли получиться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.