<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Web網頁中內嵌Activex的Activex插件開發 .

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    轉載自:

    http://blog.csdn.net/tttyd/article/details/5258096

    源代碼下載
    http://files.cnblogs.com/tttyd/Activex.rar

    由于在博主的博客中沒有講明工程的創建過程與最后插件的注冊方法,我在另一篇文章中作了補充:

    用ATL寫簡單的ActiveX控件

     

    介紹:
      如今在許多流媒體視頻網站(youku,tudou......)我們都會發現,觀看視頻之前都會有一段時間的廣告,甚至在觀看視頻途中也會插入一些廣告。實現這個效果的可以有多種技術。使用Javascript就可以實現,只需要在同一個位置分別創建兩個Object,一個嵌入Flash插件一個嵌入 WMP插件,然后切換顯示這兩個控件即可。
      使用COM/Activex技術也可以在同一個控件中實現這樣的功能。

    插件功能描述:

      上周在某個公司碰到這么一個問題,它們需要創建一個插件,內部嵌入一個Flash插件和Windows Media Player插件。然后寫一個Web測試頁面測試此Activex頁面。頁面上有三個輸入框和一個按鈕(Play)。第一個輸入框輸入falsh URL(.swf),第二個輸入框輸入.swf播放時間長度(秒),即視頻廣告時間,第三個輸入框輸入.wmv URL。點擊Play按鈕后,頁面按鈕將三個參數傳遞給控件,控件優先播放.swf,要布滿整個控件的大小。.swf播放指定的時間之后,然后播放.wmv,wmv也要布滿整個控件。

    RFID設備管理軟件

     

    容器-插件基礎:

    RFID設備管理軟件

    為在一個窗口中嵌入一個Activex的話,就需要創建一個Container Window

    然后創建被嵌入的Activex,

    然后通過上述的接口建立容器與Activex直接的聯系。

    在ATL中使用CAxHostWindow封裝了Activex容器,并進一步使用CAxWindow類來簡化控件容器的操作。


    Activex嵌入主要代碼

    1、環境設置。

     

    因為用到Flash的操作接口 IShockwaveFlash,所以在工程中導入flash的組件:

    [cpp] view plaincopyprint?
    1. #import "C:\WINDOWS\system32\Macromed\Flash\Flash32_11_3_300_257.ocx" \   
    2.     no_namespace raw_interfaces_only raw_native_types \  
    3.     named_guids exclude("IServiceProvider")  


    因為用到Medial Player的接口IWMPPlayer,所以在工程中導入WMP的組件:

    [cpp] view plaincopyprint?
    1. #import "C:\\WINDOWS\\system32\\wmp.dll" no_namespace \   
    2.     raw_interfaces_only raw_native_types named_guids  



    2.內嵌Activex的創建

    [cpp] view plaincopyprint?
    1. LRESULT CEmbed::OnCreate(UINT /*uMsg*/WPARAM /*wParam*/LPARAM /*lParam*/BOOL/*bHandled*/)  
    2. {  
    3.     RECT rc;  
    4.     GetWindowRect(&rc);  
    5.     rc.right -= rc.left;  
    6.     rc.bottom -= rc.top;  
    7.     rc.top = rc.left = 0;  
    8.       
    9.     //對于ATL3.0 必須調用AtlAxWinInit,否則Create會調用失敗   
    10.     AtlAxWinInit(); //初始化容器窗口的注冊類   
    11.     RECT rect = rc;  
    12.     //創建Shock wave flash控件播放Flash   
    13.     TCHAR* controlName = L"ShockwaveFlash.ShockwaveFlash";  
    14.     m_FlashWin.Create(m_hWnd, rect, controlName, WS_CHILD | WS_VISIBLE, 0, ID_FLASHCTRL );  
    15.     DWORD  error = ::GetLastError();  
    16.     CComPtr< IAxWinAmbientDispatch > ambient;  
    17.     m_FlashWin.QueryHost( &ambient );  
    18.       
    19.     CComPtr<IAxWinHostWindow> hostwin;  
    20.     m_FlashWin.QueryHost(&hostwin);  
    21.     hostwin->QueryControl(__uuidof(IDispatch),(void**)&m_ptrFlash.p);  
    22.     CComQIPtr<IShockwaveFlash> ptrFlash = m_ptrFlash;  
    23.     ptrFlash->put_BackgroundColor(RGB( 0, 0, 0 ) );  
    24.     //創建Windows Media Play控件播放.wmv文件   
    25.     controlName = L"WMPlayer.OCX";  
    26.     //CLSID cld;   
    27.     //::CLSIDFromProgID(controlName,&cld);   
    28.     m_WmvWin.Create(m_hWnd, rect,controlName,WS_CHILD, 0,ID_WMPCTRL);  
    29.       
    30.     if(hostwin)  
    31.         hostwin.Release();  
    32.     m_WmvWin.QueryHost(&hostwin);  
    33.     hostwin->QueryControl(__uuidof(IDispatch),(void**)&m_ptrWmv.p);      
    34.     return 0;  
    35. }  


    3.設置內嵌Activex控件的大小位置

    [cpp] view plaincopyprint?
    1. HRESULT CEmbed::SetObjectRects(LPCRECT prcPos,LPCRECT prcClip)  
    2. {  
    3.     IOleInPlaceObjectWindowlessImpl<CEmbed>::SetObjectRects(prcPos, prcClip);  
    4.     int cx, cy;  
    5.     cx = prcPos->right - prcPos->left;  
    6.     cy = prcPos->bottom - prcPos->top;  
    7.     RECT rect;  
    8.     GetClientRect( &rect );  
    9.     rect.top = 0;  
    10.     rect.left = 0;  
    11.     if(m_FlashWin)  
    12.         m_FlashWin.MoveWindow(&rect );  
    13.     if(m_FlashWin)  
    14.         m_WmvWin.MoveWindow(&rect );  
    15.     return S_OK;  
    16. }  


    4.測試代碼

    4、1  在測試代碼中根據CLASSID獲得此ID的對象playobj,但如果在沒有注冊此ActiveX控件的電腦上該怎么辦呢?

    此時得通過來在HTML文件中指定codebase="http://url-to-my-server/myactivex.cab"尋找安裝文件。

    4、2   注冊的dll文件中的接口只有四個,但 在script腳本函數中palyobj.SetJmpTimer(parseInt(obj.value));函數沒沒有出現在此DLL里。

              RFID設備管理軟件

           

     

    [cpp] view plaincopyprint?
    1. <HTML>  
    2. <HEAD>  
    3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>  
    4. <TITLE>內嵌Activex的Activex插件測試頁</TITLE>  
    5. </HEAD>  
    6. <BODY>  
    7. <OBJECT ID="Play" CLASSID="CLSID:62762BB2-C5D5-4CAC-A17C-CABC660678F2" width=700 height=400 ></OBJECT>  
    8. <br>Flash URL:<input type=text size=45 id="urlflash" value="http://www.atfriday.com/GameZone/200471922656/20047198816907.swf">      
    9. Time:<input type=text size=3 id="elapse" value=5>  
    10. <br>WMV URL:  <input type=text size=45 id="wmvflash" value="D://test//Embed//Embed//wmp.wmv">  
    11. <input type=button value="Play" onclick="play()">  
    12. <script language="javascript" type="text/javascript">  
    13. function play()  
    14. {  
    15.     var obj;      
    16.     var palyobj = document.getElementById("Play");  
    17.     obj = document.getElementById("urlflash");  
    18.     palyobj.LoadFlashMovie(obj.value);      
    19.     obj = document.getElementById("wmvflash");  
    20.     palyobj.LoadWmvMovie(obj.value);  
    21.     obj = document.getElementById("elapse");  
    22.     palyobj.SetJmpTimer(parseInt(obj.value));  
    23.     palyobj.Play();  
    24. }  
    25. <script>  
    26. </BODY>  
    27. </HTML>  

     

    擴展學習:網頁調用ActivX中的方法的第二種方式

     RFID設備管理軟件

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全