Проблема следующая — есть Win32 приложение не использующее ни MFC ни ATL-WTL.
Из него хотелось бы создать ActiveX control (используя ATL, так как в другом месте проэкта этот контрол должен хоститься конструкцией типа
CreateWindow("AtlAxWin", ..... ) ).
Т.е необходимо что-бы для начала можно было просто запустить этот созданный из Win32 приложения ActiveX в окне основного проэкта.
Ну а затем уже добавить пару методов которые бы передавали или возвращали некоторые результаты.
Реально ли это сделать и насколько сложно?
Есть ли где-то пошаговые инструкции для такого типа задач? (не думаю что я первый)
Можно ли это реализовать при помощи ATL или есть еще более простой вариант?
Интересует литература и/или конкретные рекомендации.
C ATL я сейчас только начал разбираться такчт любые рекомендации очень-очень welcome
Здравствуйте, 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.
Вроде как все

Имхо, проще вряд ли получиться