Re[5]: Как в одно окно вставить несколько ActiveX-ов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.10.01 13:49
Оценка: -1
Здравствуйте DarkGray, Вы писали:

DG>Так ведь Composite Control основан на диалоге, а динамическая вставка в диалог проходить как-то криво. Контрол вставляется, рисуется поверх всех, но клики мышки, попадают в элементы, находящиеся под ним


Все там работае нормально. Смотри стили окон и код вставки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Как в одно окно вставить несколько ActiveX-ов?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 23.10.01 14:21
Оценка:
Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?
Re: Как в одно окно вставить несколько ActiveX-ов?
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 24.10.01 06:32
Оценка:
Здравствуйте DarkGray, Вы писали:

DG>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?


Поробуйте ATL Composite Control
- А Вы что курите?
— Минздрав предупреждает
Re[2]: Как в одно окно вставить несколько ActiveX-ов?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.10.01 13:21
Оценка:
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...

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 );
Re[3]: Как в одно окно вставить несколько ActiveX-ов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.01 18:44
Оценка:
Здравствуйте DarkGray, Вы писали:

DG>>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?


РГ>>Поробуйте ATL Composite Control


DG>Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.


Да все он позволяет. Каждый контрол должен иметь свой сайт. Его роль в ATL исполняет CAxWindow. Так что динамически создавай CAxWindow и пользуяся его методами для загрузки и управления Ax-ом. Ставить парента, двигать и т.д. можно как обычнь. Подложка это простое окно. Тонкости в MSDN.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Как в одно окно вставить несколько ActiveX-ов?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 26.10.01 21:07
Оценка:
Здравствуйте VladD2, Вы писали:

DG>>>>Необходимо в одно окно вставить множество ActiveX контролов. Как такое сделать на ATL или на ATL/WTL?


РГ>>>Поробуйте ATL Composite Control


DG>>Мне необходимо динамически добавлять/удалять контролы, а composite control это не позволяет.


VD>Да все он позволяет. Каждый контрол должен иметь свой сайт. Его роль в ATL исполняет CAxWindow. Так что динамически создавай CAxWindow и пользуяся его методами для загрузки и управления Ax-ом. Ставить парента, двигать и т.д. можно как обычнь. Подложка это простое окно. Тонкости в MSDN.


Так ведь Composite Control основан на диалоге, а динамическая вставка в диалог проходить как-то криво. Контрол вставляется, рисуется поверх всех, но клики мышки, попадают в элементы, находящиеся под ним
Re[4]: Как в одно окно вставить несколько ActiveX-ов?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 26.10.01 21:17
Оценка:
Здравствуйте Аноним, Вы писали:

А>Здравствуйте 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. Некоторые из вставляемых пользователем контролов могут быть не оконными. А в этом случае мы насильно запихиваем контрол в окно, что в ряде случаев неудобно(неприемлимо), например, если контрол был с дырками (не перерисовал полностью даваемую ему область), то после обертки его окном, в эти дырки мы ничего хорошего не увидим, а хотелось бы...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.