Показать сообщение отдельно
Старый 24.01.2009, 19:21
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Для того, чтобы динамически хостить различные ActiveX с помощью библиотеки ATL MSDN рекомендует пользоваться классом AtlAxWin80. Вот вариант его использования под MSVC++ 2005:
Код:
#define _ATL_APARTMENT_THREADED
#include <atlbase.h>
#include <atlwin.h>
#include <atlhost.h>
#define ATL_MIN_CRT 
class CHostActiveXModule : public CAtlExeModuleT<CHostActiveXModule>
{
public :
   CAxWindow m_wndMain;
   // Create the Main window
   HRESULT PreMessageLoop(int nCmdShow)
   {
      HRESULT hr = CAtlExeModuleT<CHostActiveXModule>::PreMessageLoop(nCmdShow);
      if (SUCCEEDED(hr))
      {
         AtlAxWinInit();
         hr = S_OK;
         RECT rc;
         rc.top = rc.left = 100;
         rc.bottom = rc.right = 500;
         m_wndMain.Create(NULL, rc, _T("ShockwaveFlash.ShockwaveFlash"),WS_OVERLAPPEDWINDOW );
		 //m_wndMain.Create(NULL, rc, _T("c:\\myMovie.swf"),WS_OVERLAPPEDWINDOW );
         m_wndMain.ShowWindow(nCmdShow);         
      }
      return hr;
   }

   // Clean up. App is exiting.
   HRESULT PostMessageLoop()
   {
      AtlAxWinTerm();
      return CAtlExeModuleT<CHostActiveXModule>::PostMessageLoop();
   }
};
CHostActiveXModule _AtlModule;
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{
	UNREFERENCED_PARAMETER(hInstance);
   UNREFERENCED_PARAMETER(hPrevInstance);
   return _AtlModule.WinMain(nCmdShow);

}
Для работы конкретно с флэш-контролом можно использовать директиву #import, которая создаст при компиляции оберточный класс для контрола, и далее использовать интерфейс этого класса.
По вашему примеру:
зачем указан стиль WS_CHILD?
wWindow - по смыслу хэндл родительского окна либо NULL, если окно самостоятельное. Ведь класс AtlAxWin - лишь окно-контейнер для контрола.
wInstance - хэндл инстанса приложения, типа не WinMain а один из передаваемых ей параметров, либо
просто GetModuleHandle(NULL);


Последний раз редактировалось alexcon314; 24.01.2009 в 19:34.