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...
Пока на собственное сообщение не было ответов, его можно удалить.