DG>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?
РГ>Поробуйте ATL Composite Control
Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.
Re[3]: Как в одно окно вставить несколько ActiveX-ов?
От:
Аноним
Дата:
26.10.01 08:44
Оценка:
Здравствуйте DarkGray, Вы писали:
DG>>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?
РГ>>Поробуйте ATL Composite Control
DG>Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.
У CWnd есть такой метод как CreateControl. Можно делать ActiveX где угодно.
А дальше IDispatch...
Здравствуйте DarkGray, Вы писали:
DG>>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?
РГ>>Поробуйте ATL Composite Control
DG>Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.
Да все он позволяет. Каждый контрол должен иметь свой сайт. Его роль в ATL исполняет CAxWindow. Так что динамически создавай CAxWindow и пользуяся его методами для загрузки и управления Ax-ом. Ставить парента, двигать и т.д. можно как обычнь. Подложка это простое окно. Тонкости в MSDN.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Как в одно окно вставить несколько ActiveX-ов?
Здравствуйте VladD2, Вы писали:
DG>>>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?
РГ>>>Поробуйте ATL Composite Control
DG>>Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.
VD>Да все он позволяет. Каждый контрол должен иметь свой сайт. Его роль в ATL исполняет CAxWindow. Так что динамически создавай CAxWindow и пользуяся его методами для загрузки и управления Ax-ом. Ставить парента, двигать и т.д. можно как обычнь. Подложка это простое окно. Тонкости в MSDN.
Так ведь Composite Control основан на диалоге, а динамическая вставка в диалог проходить как-то криво. Контрол вставляется, рисуется поверх всех, но клики мышки, попадают в элементы, находящиеся под ним
Re[4]: Как в одно окно вставить несколько ActiveX-ов?
Здравствуйте Аноним, Вы писали:
А>Здравствуйте DarkGray, Вы писали:
DG>>>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?
РГ>>>Поробуйте ATL Composite Control
DG>>Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.
А>У CWnd есть такой метод как CreateControl. Можно делать ActiveX где угодно. А>А дальше IDispatch...
А>BOOL CWnd::CreateControl( LPCTSTR lpszClass, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE, BSTR bstrLicKey = NULL );
А>BOOL CWnd::CreateControl( REFCLSID clsid, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE, BSTR bstrLicKey = NULL );
Я примерно так и делаю. Только не с CWnd, а с CAxWindow — там есть похожая функция.
Но есть проблемы:
1. По специфике задачи, нормальным явлением считается вставка 200, а иногда до 500 контролов на один экран. И создание дополнительных 200-500 окон довольно накладно. Хотелось бы обойтись без дополнительных окон, тем более, как я понял из описания ActiveX, можно обойтись одним окном хостинга. Или я не прав?
2. Некоторые из вставляемых пользователем контролов могут быть не оконными. А в этом случае мы насильно запихиваем контрол в окно, что в ряде случаев неудобно(неприемлимо), например, если контрол был с дырками (не перерисовал полностью даваемую ему область), то после обертки его окном, в эти дырки мы ничего хорошего не увидим, а хотелось бы...
Re[5]: Как в одно окно вставить несколько ActiveX-ов?
Здравствуйте DarkGray, Вы писали:
DG>Так ведь Composite Control основан на диалоге, а динамическая вставка в диалог проходить как-то криво. Контрол вставляется, рисуется поверх всех, но клики мышки, попадают в элементы, находящиеся под ним
Все там работае нормально. Смотри стили окон и код вставки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.