Подключение ActiveX с помощью Win32Api на С++

Тема в разделе "WASM.WIN32", создана пользователем witcher, 15 дек 2006.

  1. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Подскажите как с помощью Win32Api и С++ можно подключить ActiveX элемент.
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    да-да, мне тоже интересно! может кто даст нормальную реализацию контейнера без использования мфц?
    я пробовал выдирать нужные интерфейсы из экземплов, в принципе работало, но все равно получалась такая кривотища )) например, я так и не добился, чтобы компонент ресайзился вместе с окном, а также не разобрался, как сохранять настройки, сделанные через собственный UI интерфейс компонента..
     
  3. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    CoInitialize(NULL);
    AtlAxWinInit();
    CoCreateInstance(CLSID_ShockwaveFlash,NULL,CLSCTX_INPROC_SERVER,IID_IShockwaveFlash,(void**)&flash_obj);
    flash_hwnd=CreateWindow("AtlAxWin",0,WS_VISIBLE|WS_POPUP,0,0,600,400,0,0,0,0);
    AtlAxAttachControl(flash_obj,flash_hwnd,NULL);

    flash_obj->put_BackgroundColor(0);
    flash_obj->put_Scale(L"NoScale");
    flash_obj->put_EmbedMovie(TRUE);
    flash_obj->put_Movie(L"test.swf");
    flash_obj->SetVariable(L"test_var",L"test");
    flash_obj->TCallLabel(L"_level0",L"Init");
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    kropalik
    Это не WinAPI.
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    n0name
    а стандартных библиотек для поддержки activex не существует

    kropalik
    об этой стороне ATL я даже не знал )
    а как отследить событие, сгенерированное контролом?
     
  6. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    flash_ev=new _IShockwaveFlashEvents;
    AtlAdvise(flash_obj,flash_ev,DIID__IShockwaveFlashEvents,&t);
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    в смысле flash_ev - это собственный интерфейс IDispatch?

    окошко никак не хочет создаваться:
    HWND flash_hwnd=CreateWindow(CAxWindow::GetWndClassName(), "", WS_VISIBLE|WS_POPUP, 0, 0, 600, 400, 0, 0, 0, 0);
     
  8. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    да нужно написать реализацию метода Invoke() который будет
    вызываться при событиях происходящих в контроле. в случае
    flash это например fscommnd ...
    второй параметр NULL а не ""
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    так тем более не работает
    а ошибка возникает из-за вызова AtlAxCreateControlLic() при обработке WM_CREATE в функции AtlAxWindowProc() (файл atlhost.h)
    строчка:
    Код (Text):
    1. HRESULT hRet = AtlAxCreateControlLic(T2COLE(lpstrName), hWnd, spStream, &spUnk, NULL);
    возвращается hRet=E_OUTOFMEMORY
    ? ((
     
  10. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    А хотябы ссылку на работающий пример можно увидеть?
     
  11. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Кстати при CreateWindow("AtlAxWin",0,WS_VISIBLE|WS_POPUP,0,0,600,400,0,0,0,0);
    CreateWindow возвращает NULL.
    Пробовал на VS2005
     
  12. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    http://rapidshare.com/files/7778622/TEST2.rar.html
    test2.swf положить в c:/temp/ или исправить путь в exe
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    kropalik
    thanks

    под седьмым sdk все равно не работает, но идея понятна
     
  14. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    kropalik
    спасибо за пример. А чем ты его компилил?
     
  15. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    ms visual c++ 6.0
    это выдран кусок из проекта (из нескольких файлов)
    так что сам по себе конечно может глючить.
     
  16. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    вот моя старая лаба показывает SWF
     
  17. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Требуется узнать версию Flash.
    Код (Text):
    1. ...
    2. HRESULT hr;
    3. DISPID dispid_prop1 = NULL;
    4. DISPPARAMS dispparams;
    5. DISPID dispidNamed = DISPID_VALUE;
    6. ...
    7. hr = ppw->Invoke(LoadMovie);
    8.     VARIANT varet;
    9.     VARIANTARG va2;
    10.     va2.vt = VT_EMPTY;
    11.     dispparams.cArgs = 0;
    12.     dispparams.cNamedArgs = 0;
    13.     dispparams.rgdispidNamedArgs = &dispidNamed;
    14.     dispparams.rgvarg = &va2;
    15.     dispid_prop1 = 132;//FlashVersion
    16.     hr = ppw->Invoke(dispid_prop1,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispparams,&varet,0,0);
    17. ...
    Получается: hr = S_OK, varet (I4 = 589824)
    (через popup menu окна показывается версия 9) как правильно узнать?
    lstrcpyn(szVersion,_itoa(varet.intValue,szBuff,10)+2,1); =)
     
  18. PaVeL_PoL

    PaVeL_PoL New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2007
    Сообщения:
    14
    отступление чуть в сторону...
    подскажите пожалуйста а какой функцией можно сменить WEB-страничку (URL) в "AtlAxWin". Мол по адресу вернуться или ещё чё-нить... в MSDN я не совсем въехал... я так понял - это многофункциональный компонент...
    За любую помощь буду благодарен...
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    AtlAxWin - это хост для компонентов. Тебе нужно получить указатель на IWebBrowser2 и дальше работать с ним.
     
  20. Salvador

    Salvador New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2008
    Сообщения:
    6
    подключить ActiveX Flash из файла - расплюнуть. А вы таки попробуйте подключить его из ресурса приложения! У вас "заклинит" моск это сделать!!!