none
ActiveX Windows media player 控件 我添加类时生成的mp.h public 部分没有对url 路径的声明 并且导致我在使用m_ctrlMPlayer.put_URL 找不到声明部分 RRS feed

  • 问题

  • #pragma once

    // 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类

    // 注意: 不要修改此文件的内容。如果此类由
    //  Microsoft Visual C++ 重新生成,您的修改将被覆盖。

    /////////////////////////////////////////////////////////////////////////////
    // CMp 包装类

    class CMp : public CWnd
    {
    protected:
     DECLARE_DYNCREATE(CMp)
    public:
     CLSID const& GetClsid()
     {
      static CLSID const clsid
       = { 0x6BF52A52, 0x394A, 0x11D3, { 0xB1, 0x53, 0x0, 0xC0, 0x4F, 0x79, 0xFA, 0xA6 } };
      return clsid;
     }
     virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
          const RECT& rect, CWnd* pParentWnd, UINT nID,
          CCreateContext* pContext = NULL)
     {
      return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
     }

        BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
        UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
        BSTR bstrLicKey = NULL)
     {
      return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
      pPersist, bStorage, bstrLicKey);
     }

    // 属性
    public:
    enum
    {
        mpReadyStateUninitialized = 0,
        mpReadyStateLoading = 1,
        mpReadyStateInteractive = 3,
        mpReadyStateComplete = 4
    }MPReadyStateConstants;
    enum
    {
        mpStopped = 0,
        mpPaused = 1,
        mpPlaying = 2,
        mpWaiting = 3,
        mpScanForward = 4,
        mpScanReverse = 5,
        mpClosed = 6
    }MPPlayStateConstants;
    enum
    {
        mpDefaultSize = 0,
        mpHalfSize = 1,
        mpDoubleSize = 2,
        mpFullScreen = 3,
        mpFitToSize = 4,
        mpOneSixteenthScreen = 5,
        mpOneFourthScreen = 6,
        mpOneHalfScreen = 7
    }MPDisplaySizeConstants;
    enum
    {
        mpTime = 0,
        mpFrames = 1
    }MPDisplayModeConstants;
    enum
    {
        mpShowURL = 0,
        mpClipURL = 1,
        mpBannerURL = 2
    }MPMoreInfoType;
    enum
    {
        mpShowFilename = 0,
        mpShowTitle = 1,
        mpShowAuthor = 2,
        mpShowCopyright = 3,
        mpShowRating = 4,
        mpShowDescription = 5,
        mpShowLogoIcon = 6,
        mpClipFilename = 7,
        mpClipTitle = 8,
        mpClipAuthor = 9,
        mpClipCopyright = 10,
        mpClipRating = 11,
        mpClipDescription = 12,
        mpClipLogoIcon = 13,
        mpBannerImage = 14,
        mpBannerMoreInfo = 15,
        mpWatermark = 16
    }MPMediaInfoType;
    enum
    {
        dvdMenu_Title = 2,
        dvdMenu_Root = 3,
        dvdMenu_Subpicture = 4,
        dvdMenu_Audio = 5,
        dvdMenu_Angle = 6,
        dvdMenu_Chapter = 7
    }DVDMenuIDConstants;
    enum
    {
        mpShowDialogHelp = 0,
        mpShowDialogStatistics = 1,
        mpShowDialogOptions = 2,
        mpShowDialogContextMenu = 3
    }MPShowDialogConstants;


    // 操作
    public:

    ?????????????????????????????怎么没有了

    正常时这里还有其他的定义  可我的没有 windows media player 添加的包装类

    };

    2011年1月2日 1:54

答案

全部回复

  • 张慧龙,

          您好!请问您用的是MFC还是CLR? 请您把您出现的问题再描述清楚一点。这样我们才可以更好地给您分析问题,解决问题。

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月3日 6:46
    版主
  • 我用的是 MFC  问题在代码的最后几行注释了
    2011年3月7日 13:16
  • 张慧龙,

    您好!

    请您先确认下您是否安装了Windows Media Player 软件。

    其次,在vs中调用Windows Media Player 控件,有以下步骤,看下您是否有漏掉哪一步,或做错了什么。

    1. 文件——》新建——》项目,选择MFC应用程序——》名称为player——》确定——》点击应用程序类型——》基于对话框——》完成。
    2.DIALOG中右击——》插入ACTIVEX控件——》选Windows Media Player ,添加了Windows Media Player 控件IDIDC_OCX1
    3.Windows Media Player控件右击——》添加变量——》变量名为m_wmplayer——》完成。

    4. 拉二个按钮到DIALOG打开暂停,双击打开输入相应代码:
    5.右击类视图/解决方案〉添加类〉选择“Active中的MFC”—〉选择windows media player <1.0>选择所有接口生成类。

    6. 在然后在对话框头文件中(playerDlg.h)添加了以下变量:
    CWMPControls m_control;
    7.playerDlg.cppOnInitDialog()中添加代码:
    m_control = static_cast <CWMPControls>(m_wmPlayer.get_controls());
    8.双击暂停输入相应代码;

    另外请您参照以下链接中的文章:

    这篇文章详细解讲解了Windows Media Player 控件的使用,可以下载它的源码研究。在这个文章的源码中put_URL是在wmp.tlh中定义。具体可以看此文:

    http://www.codeproject.com/KB/atl/WindowlessMedia.aspx

     

    如果您的问题解决了,请把有用的回答标记为答案!

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月10日 7:52
    版主
  • lucy 同学:

                 你尝试重现一下你回帖的时候所描述的步骤吧, 你会发现:

                      5.右击类视图/解决方案〉添加类〉选择“Active中的MFC”—〉选择windows media player <1.0>选择所有接口生成类。

           事实上这个"第5步"根本不存在 !!!!!!!    我觉得是system32下面的wmp.dll有问题.

           我的环境是: VS10.Ul.Eng___Win7Ul.Eng.64Bit___WMP为系统原生的WMP12.

           在第5步的时候, 按照常理来想的话, 添加类的时候, VS会自动找到注册表里面注册过的 WMP_ActiveX, 而实际上它找不到!

           以至于我只能点"浏览"去system32目录下面去选择WMP.dll, 但即便这样, VS依然不能顺利导出所有的接口函数.

           我前两天发帖问了问, 结果也不知道谁从哪里复制了一段回复过来, 让我很疑惑...

     

    谢谢!

    2011年3月10日 14:36
  • 呵呵, 真不好意思, 我又看了一下我自己发的那条帖, 回复的人貌似就是你... 

    2011年3月10日 14:40
  • Hi AmericanUSR,

    谢谢你提出意见。

    其次,我的回复中有给出一个KB文章,如果之前给的步骤张慧龙依然无法解决问题的话,他可以去参照这篇文章,这篇文章讲解了如何使用Windows Media Player。还可以下源码好好研究。

    对于你的帖子http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/299126c4-cb38-4ebb-8280-631e87e61b09/ 我已经给出了一个回复,如果您还有什么问题请关注此帖。

     

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月11日 2:24
    版主