Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MFC - ActiveX control c пониманием дела :-) (без MFC и ATL)

Ответить
Настройки темы
MFC - ActiveX control c пониманием дела :-) (без MFC и ATL)

Пользователь


Сообщения: 90
Благодарности: 1

Профиль | Отправить PM | Цитировать


Не могу найти примера, где создавался бы реальный ActiveX control без использования ATL или MFC.
Если у кого-нибудь есть такой tutorial или знаете где взять, помогите plz.

В принципе, туториал может быть и не нужен. Нужен ответ на вопрос, чем отилчаются друг от друга ActiveX, COM и OLE?
Я понимаю что такое COM. Помогите найти определение, что такое ActiveX.

Какие интерфейсы должен имплементировать COM-объект, чтобы он мог смог отображать себя в окне клиентской программы?
На уровне моего понимания, последний вопрос сформулирован правильно. Это вопрос, ответ на который для меня наиболее интересен. Если же на него нельзя дать ответ (неправильный вопрос), то объясните почему :-)

Илья.

Отправлено: 11:17, 02-08-2005

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо за ответ!

Но я всё равно не могу добиться того чего хочу. Мне нужно получить ActiveX-дилог. То есть, чтобы у меня было окошко с набором элементов управления, которое бы умело отображаться в IE.

Прямых рецептов как это сделать я не нашёл. Я не понимаю где "котейнер" берет окно "элемента управления".
Я попробовал написать COM объект, который бы имплеметировал IOleWindow::GetWindow. Думал, что контейнер дёргает эту функцию, когда хочет элемент отобразить. В моей реализации создавалось окно с текстом. Это окно я хотел выдавать через GetWindow. Однако в IE как оторажался белый квадрат, так отображается. :-(

Отправлено: 23:08, 16-08-2005 | #3


Пользователь


Сообщения: 90
Благодарности: 1

Профиль | Отправить 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);

			....
		 }
3. После этого начал вызываться метод GetWindow моего копанента. В этом методе я создаю окно, в оконной процедуре,
которого, при обработке 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Отбой! Проблема разрешилась (частично)

Отправлено: 16:12, 19-08-2005 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MFC - ActiveX control c пониманием дела :-) (без MFC и ATL)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - [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




 
Переход