Tauruser

Enjoy Every Day
posts - 34, comments - 95, trackbacks - 0, articles - 5
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

VC++2005 比 VC++ 6.0 退步了?

Posted on 2006-03-25 14:43 Tauruser 阅读(7186) 评论(12)  编辑 收藏 引用

  小组已经决定开发对于内部网适用的网络电视,这两天一直就在查找使用Windows Media Player ActiveX控件开发播放功能的方法。在网上找了好些书,也到MSDN上找过了,并安装了Windows Media Player SDK工具包。无奈都找不到有讲解在VC++2005下的文章,VC++2003也好啊。是否这两个平台都还没出说明文档,只是找到了VC6.0下的帮助。SDK Sample里还是有源代码和SDK帮助文档里也谈了一些。可惜全是E文来的(痛苦)。
  一开始对着SDK帮助文档,在2005下操作。虽然我知道文档写的是6.0下的情况,但是我想应该不会相差太大的。依葫芦画瓢的东西就不说了。将WMP控件添加到窗体,给它添加成控件变量。然后想在菜单中添加一个项目,点击的时候就可以播放特点的URL。就在这一步,问题来了。调用控件变量时,发现并没有多少成员函数可以给我调用,文档里显示有的函数,2005的智能感应也没法显示出来。到底是哪里的问题。
  无奈,使用VC6.0照着多做一次,终于发现区别了。6.0里添加变量之后,VC自动生成了很多类。看一下这些头文件就知道了。

#include  " wmpplayer4.h "

//  Dispatch interfaces referenced by this interface
#include  " wmpcontrols.h "
#include 
" WMPSettings.h "
#include 
" wmpmedia.h "
#include 
" wmpmediacollection.h "
#include 
" wmpplaylistcollection.h "
#include 
" wmpnetwork.h "
#include 
" wmpplaylist.h "
#include 
" wmpcdromcollection.h "
#include 
" wmpclosedcaption.h "
#include 
" WMPError.h "
#include 
" wmpdvd.h "
#include 
" WMPPlayerApplication.h "

  每个头文件都对应了一个类。而在2005下,仅是简简单单了生成了一个类似于CWMPPlayer4的类。而且类中的内容也缩水了。6.0下生成的CWMPPlayer4已经可以提供很多功能了如:

public :
    
void  close();
    CString GetUrl();
    
void  SetUrl(LPCTSTR lpszNewValue);
    
long  GetOpenState();
    
long  GetPlayState();
    CWMPControls GetControls();
    CWMPSettings GetSettings();
    CWMPMedia GetCurrentMedia();
    
void  SetCurrentMedia(LPDISPATCH newValue);
    CWMPMediaCollection GetMediaCollection();
    CWMPPlaylistCollection GetPlaylistCollection();
    CString GetVersionInfo();
    
void  launchURL(LPCTSTR bstrURL);
    CWMPNetwork GetNetwork();
    CWMPPlaylist GetCurrentPlaylist();
    
void  SetCurrentPlaylist(LPDISPATCH newValue);
    CWMPCdromCollection GetCdromCollection();
    CWMPClosedCaption GetClosedCaption();
    BOOL GetIsOnline();
    CWMPError GetError();
    CString GetStatus();
    CWMPDVD GetDvd();
    CWMPPlaylist newPlaylist(LPCTSTR bstrName, LPCTSTR bstrURL);
    CWMPMedia newMedia(LPCTSTR bstrURL);
    BOOL GetEnabled();
    
void  SetEnabled(BOOL bNewValue);
    BOOL GetFullScreen();
    
void  SetFullScreen(BOOL bNewValue);
    BOOL GetEnableContextMenu();
    
void  SetEnableContextMenu(BOOL bNewValue);
    
void  SetUiMode(LPCTSTR lpszNewValue);
    CString GetUiMode();
    BOOL GetStretchToFit();
    
void  SetStretchToFit(BOOL bNewValue);
    BOOL GetWindowlessVideo();
    
void  SetWindowlessVideo(BOOL bNewValue);
    BOOL GetIsRemote();
    CWMPPlayerApplication GetPlayerApplication();
    
void  openPlayer(LPCTSTR bstrURL);

  相反在2005下的生成的类一点成相应的成员函数都没有提供。(郁闷)
  照着6.0下的源码给2005添加相应的成员函数,bingo正常工作了。
  难道我以后的工程都要在6.0下先生成代码,然后再COPY到2005下。(天啊,折磨人啊)
  到底是2005比6.0退步了,还是我不会用2005?怎么回事?


 

Feedback

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2006-03-25 15:52 by Donne
用MapObjects进行VC二次开发也有这个问题!

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2006-03-29 10:39 by reviver
我觉得VS.net的编译速度也要比VC6慢得多

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2006-03-30 21:54 by jemmy
2005相对VC6,更符合C++标准,不要被VC6惯坏了

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2006-03-31 10:24 by sPhinX
有点怀疑,做网络电视,用Windows Media Player ActiveX控件就可以了?不知道控件能不能完全满足你的需要,我还是觉得这些东西还是用DirectShow自己来实现放心一些。

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2006-04-05 14:46 by 梦天堂
我学校用的是VC++6.0
感觉还不错

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2006-06-19 09:32 by lqicc
CWMPPlaylist newPlaylist(LPCTSTR bstrName, LPCTSTR bstrURL);
请问这个怎么用啊。
我在VC下,怎么总会出现错误。
我想实现的是,在一个关于音乐文件的列表中的数据,放到Windows Media Player的播放列表中。
谢谢!

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2007-06-10 00:32 by ljzpzh
在网上下了个VC++6.0,编译过程经常操作无反映,郁闷.哪位好心人有正版的捐出来大家分享一下.先谢过了.

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2007-06-10 12:01 by 星梦情缘
正在学习VC++6.0中..................

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2007-07-13 00:14 by yuanrichard
你自己不会用别怪开发环境,vc05对c++标准的支持更好了,改进的东西多了很多,那个添加activex不是象你那样做的,从vs03开始就可以通过右击项目,选择添加类菜单添加这种Activex的类支持了,在添加类里面有个从Activex控件添加mfc类,选择这个就可以添加Windows Media Player ActiveX的类了,然后再添加变量生成的对应的类的接口就都完善了。做网络电视播放用这个控件不好用,很多格式支持不行的,不如自己开发一个。

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2008-07-15 13:39 by vs2005
yuanrichard ,vs2005是可以添加类到工程,但是生成的是变量名是 COcx1 m_player;

vs6里生成的变量很直观, CWMPPlayer4 m_player;
可以直接使用CWMPPlayer4里的方法,但是vs2005里使用起来极不方便,有哪些方法也没提示!

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2008-08-13 14:13 by wwd
在OninitialDialog里添加一个:CWMPPlayer4 m_player->CreateDispatch(COcx1对象m_player.GetClsid()),就行了

# re: VC++2005 比 VC++ 6.0 退步了?  回复  更多评论   

2009-05-28 12:24 by geyin
一般逻辑
越来越好

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理