关于在vc6后续版本MFC程序中使用ActiveX组件

    看完季后赛第二轮火箭主场和湖人的比赛,意料中的又输了,虽然总是期待着火箭能做成黑马,创造奇迹。

无事打开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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值