|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MFC - ActiveX control c пониманием дела :-) (без MFC и ATL) |
|
MFC - ActiveX control c пониманием дела :-) (без MFC и ATL)
|
Пользователь Сообщения: 90 |
Профиль | Отправить PM | Цитировать Не могу найти примера, где создавался бы реальный ActiveX control без использования ATL или MFC.
Если у кого-нибудь есть такой tutorial или знаете где взять, помогите plz. В принципе, туториал может быть и не нужен. Нужен ответ на вопрос, чем отилчаются друг от друга ActiveX, COM и OLE? Я понимаю что такое COM. Помогите найти определение, что такое ActiveX. Какие интерфейсы должен имплементировать COM-объект, чтобы он мог смог отображать себя в окне клиентской программы? На уровне моего понимания, последний вопрос сформулирован правильно. Это вопрос, ответ на который для меня наиболее интересен. Если же на него нельзя дать ответ (неправильный вопрос), то объясните почему :-) Илья. |
|
Отправлено: 11:17, 02-08-2005 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Почитай туторал (хотя бы борландовский).
COM - достаточно описать IUnknown OLE - COM + твой класс-сервер должен предоставлять кучк интерфейсов, связанных со встраиванием твоего документа в чужую программу. ActiveX - OLE + Ты должен описать метаданные твоего класса, т.е. IDispatch, typelib В хелпе приведены подробные списки интерфейсов, какой за что отвечает и примеры реализации Цитата:
IOleWindow The base interface. Implemented and used by containers and objects to window handles and manage context-sensitive help. IOleInPlaceObject Implemented by objects and used by an object's immediate container to activate and deactivate the object. IOleInPlaceActiveObject Implemented by objects and used by the top-level container to manipulate the object while it is active. Provides a direct channel of communication between an active object and its frame and document windows. IOleInPlaceUIWindow Implemented by containers and used by objects to manipulate the container's document window. IOleInPlaceFrame Implemented by containers and used by objects to control the container's frame window. IOleInPlaceSite Implemented by containers and used by objects to interact with the in-place client site. These interfaces can be arranged in three hierarchical levels with various interfaces implemented at each level. Calls that install user-interface menus and frame adornments, activate and switch between windows, and dispatch menu and keystrokes take place between the top-level container and the active object. Calls that support activating, deactivating, scrolling, or clipping span the containment hierarchy, with each level performing the correct actions. When to Implement The inherited methods of this interface are implemented by all in-place objects and containers. When to Use Use this interface to obtain the window handle to the windows associated with in-place activation (frame, document, parent, and in-place object). It is also used to enter and exit context-sensitive help. |
|
Отправлено: 14:11, 10-08-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Спасибо за ответ!
Но я всё равно не могу добиться того чего хочу. Мне нужно получить ActiveX-дилог. То есть, чтобы у меня было окошко с набором элементов управления, которое бы умело отображаться в IE. Прямых рецептов как это сделать я не нашёл. Я не понимаю где "котейнер" берет окно "элемента управления". Я попробовал написать COM объект, который бы имплеметировал IOleWindow::GetWindow. Думал, что контейнер дёргает эту функцию, когда хочет элемент отобразить. В моей реализации создавалось окно с текстом. Это окно я хотел выдавать через GetWindow. Однако в IE как оторажался белый квадрат, так отображается. :-( |
Отправлено: 23:08, 16-08-2005 | #3 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Мне нужно сделать, чтобы в качестве ActiveX-элемента в окне эксплорера отображался диалог.
Это нужно сделать без использования MFC или ATL. Я понимаю как можно сделать, чтобы элемент себя отрисовывал на контекте. Но в случае с дилогом это не подходит. Нужно каким-то обрахом передавать контейнеру окно диалога. (Или не нужно? Поправте меня). Однако у меня так и не получилось создать окно с закрашенной, клиентской частью, и передать его контейнеру так, чтобы оно отобразилось в IE. Я попытался сделать это следующим образом: 1. Имплементировал IOleInPlaceActiveObject и IOleObject 2. в реализации метода SetClientSite сделал m_pFrame->SetActiveObject(this, NULL). virtual HRESULT STDMETHODCALLTYPE SetClientSite( /* [unique][in] */ IOleClientSite *pClientSite) { m_pClientSite = pClientSite; CComPtr<IOleInPlaceSite> pInPlaceSite; OLEINPLACEFRAMEINFO frameInfo; RECT posRect, clipRect; HRESULT hr = m_pClientSite.QueryInterface(&pInPlaceSite); if(hr == S_OK) hr = pInPlaceSite->GetWindowContext(&m_pFrame, &pUIWin, &posRect, &clipRect, &frameInfo); if(hr == S_OK) hr = m_pFrame->SetActiveObject(this, NULL); .... } которого, при обработке WM_PAINT, клиентская часть заполняется цветом десктопа. Однако это не приводит к желаемому результату. Окно activex-элемента в IE так и остаётся белым. Чтобы донести до контейнера, что нужно отрисовывать окно, я пробовал вызывать. m_pFrame->Show, m_pClientSite->OnInPlaceActivate(), pInPlaceSite->OnUIActivate(); m_pClientSite->ShowObject() m_pFrame->GetWindow(&hwnd); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); Не помогает. Во время выполненеия программы ни разу не было послано сообщение WM_PAINT моему окну. |
Отправлено: 09:33, 19-08-2005 | #4 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Отбой! Проблема разрешилась (частично)
|
|
Отправлено: 16:12, 19-08-2005 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интернет - [addon] Adobe Shockwave Player | WindoStroy | Наборы обновлений для Windows XP/2003/Windows 7 | 178 | 10-08-2011 16:44 | |
Интернет - непонятные дела в центре управления сетями | CASHis | Microsoft Windows Vista | 0 | 01-03-2009 09:43 | |
Шпионы, все дела... | Ares2005 | Защита компьютерных систем | 19 | 31-05-2005 16:41 | |
Что есть ATL.dll в win\Me | Guest | Microsoft Windows 95/98/Me (архив) | 2 | 18-12-2003 15:02 | |
Source Control, Bug Control | Guest | Программирование и базы данных | 1 | 04-02-2003 12:56 |
|