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

问题
-
#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年3月7日 13:15
答案
-
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.
- 已建议为答案 VisualElevenModerator 2011年3月28日 1:07
- 已标记为答案 VisualElevenModerator 2011年3月31日 0:34
全部回复
-
张慧龙,
您好!请问您用的是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.
-
张慧龙,
您好!
请您先确认下您是否安装了Windows Media Player 软件。
其次,在vs中调用Windows Media Player 控件,有以下步骤,看下您是否有漏掉哪一步,或做错了什么。
1. 文件——》新建——》项目,选择MFC应用程序——》名称为player——》确定——》点击应用程序类型——》基于对话框——》完成。
2.在DIALOG中右击——》插入ACTIVEX控件——》选Windows Media Player ,添加了Windows Media Player 控件ID为IDC_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.cpp的OnInitDialog()中添加代码:
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月27日 10:33
- 取消答案标记 张慧龙 2011年3月27日 10:34
- 已建议为答案 VisualElevenModerator 2011年3月28日 1:07
-
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依然不能顺利导出所有的接口函数.
我前两天发帖问了问, 结果也不知道谁从哪里复制了一段回复过来, 让我很疑惑...
谢谢!
- 已建议为答案 VisualElevenModerator 2011年3月31日 0:34
-
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.
- 已建议为答案 VisualElevenModerator 2011年3月28日 1:07
- 已标记为答案 VisualElevenModerator 2011年3月31日 0:34