關於在vc6後續版本MFC程式中使用ActiveX組件

來源:互聯網
上載者:User

    看完季後賽第二輪火箭主場和湖人的比賽,意料中的又輸了,雖然總是期待著火箭能做成黑馬,創造奇蹟。

無事開啟csdn看到有個tx提問說vs2003下面在MFC程式中使用wmp控制項的問題,說啥vs2003 2005和以前的

vc6不太相同了,於是就試了下,發現還真的是有些變化。

    在vc6下面,直接在MFC工程中插入一個ActiveX組件,然後在為其建立一個控制項類型成員的同時,MFC會為此組件產生很多的相關封裝類,例如,對wmp而言,會產生CWMPPLAYER4 CWMPCONTROL CWMPSETTINGS等等(你可以自己確定是否要產生對應的封裝類)。之後,你就可以利用這些類來控制wmplayer工作了。

    在vs2003呢? 按照前面的步驟操作了一下,建立一個MFC 對話方塊,然後在裡頭插入一個wmplayer控制項,緊接著為其添加一個成員變數,發現嚮導自動為其產生一個ocx1的視窗衍生類別(CWnd)的成員。 這個ocx1怎麼用啊,沒有直接將wmp控制項的各個介面給封裝出來啊,難道還是需要我們用原生介面或者用IDispatch介面啊?

    後面摸索了一下,發現在vs2003以及後面的版本中產生wraper類的方法。

    選中工程,點擊右鍵選擇"添加類",在裡頭選擇"從ActiveX控制項中產生MFc類",之後選擇我們的控制項(從系統當前以及註冊的控制項列表)。這裡我們選中"Windows Media Player"控制項,選擇後下面的左邊會列出wmp的一些介面,選擇左邊的介面,添加到右邊,嚮導就會為此介面產生對應的封裝類。到此應該發現和vc6實際上是一樣的吧。例如這裡我們選擇IWmpPlayer介面,嚮導就會為其封裝為CWMPPlayer4類,然後我們可以為對話方塊中的wmp控制項添加一個控制項成員,設定其類型為CWMPPlayer4,之後就可以用如下代碼進行播放控制了:

    CWMPPlayer4 m_player;   // dlg標頭檔中定義的成員變數

 

    // 播放檔案

    CWMPSettings2 set = m_player.get_settings();
    set.put_autoStart(FALSE);
    m_player.put_URL(_T("e://testproject//media//昆明湖.mp3"));

    // 控制暫停和播放

    CWMPControls3 control = m_player.get_controls();
    if (m_bPause == true)
    {
        control.play();
    }
    else
    {
        control.pause();
    }

    m_bPause = !m_bPause;

 

等等操作......

 

    這裡需要注意一個問題:在前面所說的通過ActiveX建立Mfc類的時候,測試發現,第一個添加的是從Cwnd派生出來的,而後面的是COleDispatchDriver派生出來的。不過也不一定是這樣,我先添加了CWMPPlayer4 CWMPControls2,然後添加CWMPSettings,發現CWMPSettings又是從Cwnd派生的,不過沒關係了,直接修改其基類為COleDispatchDriver,另外稍微修改一下建構函式即可。需要注意的是:對話方塊的wmp控制項其DDX的成員變數需從CWnd派生的類型才行。例如這裡我添加的CWMPPlayer4是從CWnd派生的,所以DDX映射如下:

    DDX_Control(pDX, IDC_OCX1, m_player);

 

 

最後,發現產生的wrapper基類的問題是ide的一個bug,已經有人提出,應該在orcas beta2中會解決吧,期待。。。

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=291427

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.