CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

请教各位师兄:如何在我的VC++ Win32SDK程序中播放FLASH动画!

楼主dragon_zqw(追逐我的梦)2002-12-02 18:20:50 在 VC/MFC / 图形处理/算法 提问

如题,我想在我的WIN32SDK程序中播放FLASH动画,请问如何才能实现? 问题点数:80、回复次数:13Top

1 楼dragon_zqw(追逐我的梦)回复于 2002-12-04 17:49:25 得分 0

为什么大家都不回答,如果分太低,我还可以加!Top

2 楼hzwanglw(Ringwraiths)回复于 2002-12-05 12:22:15 得分 10

如果你用自己的程序打开,偶不知道,但可通过shell调用,来激活相关的程序来打开如:Realplayer等  
  HINSTANCE   ShellExecute(  
          HWND   hwnd,    
          LPCTSTR   lpVerb,  
          LPCTSTR   lpFile,    
          LPCTSTR   lpParameters,    
          LPCTSTR   lpDirectory,  
          INT   nShowCmd  
  );  
  Top

3 楼dragon_zqw(追逐我的梦)回复于 2002-12-05 17:17:22 得分 0

我看了MicroMedia的主页,好像是有FlashPlayer的SDK,但是要引费的,不知谁有呀!Top

4 楼kingcom_xu(冷羽)回复于 2002-12-05 17:21:51 得分 0

GZ!Top

5 楼bluesonic()回复于 2002-12-05 17:43:18 得分 0

:〉  
  创建控件吗,那么费劲干吗  
   
  插入一个浏览器控件:)  
  创建一个简单的HTML文件,只包含你的FLASH  
  动态更新文件名Top

6 楼dragon_zqw(追逐我的梦)回复于 2002-12-06 10:37:32 得分 0

我主要是将对FLASH动画的播放控制加入播放器中,所以要一种更可取方法!Top

7 楼shesh(无所谓)回复于 2002-12-06 12:24:37 得分 10

用框架生成flash的控件文件后.  
  直接用CReate就可以了.  
  我就是这么显示的,不过是MFC的.Top

8 楼dancing999(芯片)回复于 2002-12-06 16:45:14 得分 0

关注!Top

9 楼masterz(www.fruitfruit.com)回复于 2002-12-06 16:51:24 得分 60

////////////////////////////////////////////////////////////////////////////////  
  //   Use   swflash.ocx   to   play   flash    
  //   if   it   works,   it   is   written   by   masterz,   otherwise   I   don't   know   who   writes   it(*_*)  
  ////////////////////////////////////////////////////////////////////////////////  
  #include   "stdafx.h"  
  #define   MAX_LOADSTRING   100  
  #import   "c:\winnt\system32\macromed\flash\swflash.ocx"  
  #include   <atlbase.h>  
    CComModule   _Module;  
  #include   <atlwin.h>  
  #pragma   comment(lib,"atl")  
  #define   ODS(x)   OutputDebugString(x)  
   
  //class   CFlashSink   :   public   IDispatch,public   ShockwaveFlashObjects::DShockwaveFlashEvents  
    class   CFlashSink   :   public   ShockwaveFlashObjects::DShockwaveFlashEvents  
  {  
  public:  
  CFlashSink()   :   m_pFlash(NULL),   m_dwRef(1),  
  m_hrConnected(CONNECT_E_CANNOTCONNECT),  
  m_dwCookie(0),   m_pCP(NULL)  
  {  
  }  
   
  ~CFlashSink()  
  {  
  }  
   
  HRESULT   Init(ShockwaveFlashObjects::IShockwaveFlash*   pWin)  
  {  
  HRESULT   hr   =   NOERROR;  
  LPCONNECTIONPOINTCONTAINER   pCPC   =   NULL;  
  if   (m_pFlash)  
  m_pFlash->Release();  
  m_pFlash   =   pWin;  
  if   (FAILED(hr   =   pWin->QueryInterface(IID_IConnectionPointContainer,   (LPVOID*)&pCPC)))  
  goto   Error;  
  if   (FAILED(hr   =   pCPC->FindConnectionPoint(__uuidof(ShockwaveFlashObjects::DShockwaveFlashEvents),   &m_pCP)))  
  goto   Error;  
  m_hrConnected   =   m_pCP->Advise((LPUNKNOWN)this,   &m_dwCookie);  
  ODS("Init   runs   well");  
  Error:  
  if   (pCPC)   pCPC->Release();  
  return   hr;  
  }  
  HRESULT   Passivate()  
  {  
  HRESULT   hr   =   NOERROR;  
  if   (m_pCP)  
  {  
  if   (m_dwCookie)  
  {  
  hr   =   m_pCP->Unadvise(m_dwCookie);  
  m_dwCookie   =   0;  
  }  
    m_pCP->Release();  
    m_pCP   =   NULL;  
  }  
  if   (m_pFlash)  
  {  
  m_pFlash->Release();  
  m_pFlash   =   NULL;  
  }  
  return   NOERROR;  
  }  
  //   IUnknown   methods  
          STDMETHOD(QueryInterface)(REFIID   riid,   LPVOID*   ppv)  
  {  
  *ppv   =   NULL;  
  if   (IID_IUnknown   ==   riid)  
  {  
  *ppv   =   (LPUNKNOWN)this;  
  AddRef(); ODS("IID_IUnknown");  
  return   NOERROR;  
  }  
  else   if   (IID_IDispatch   ==   riid)  
  {  
  *ppv   =   (IDispatch*)this;  
  AddRef(); ODS("IID_IDispatch");  
  return   NOERROR;  
  }  
  else   if(riid==__uuidof(ShockwaveFlashObjects::DShockwaveFlashEvents))  
  {  
  *ppv   =   (ShockwaveFlashObjects::DShockwaveFlashEvents*)this;  
  AddRef(); ODS("DShockwaveFlashEvents");  
  return   NOERROR;  
  }  
  else  
  {  
  OLECHAR   wszBuff[39];  
  int   i   =   StringFromGUID2(riid,   wszBuff,   39);  
  TCHAR   szBuff[39];  
  i   =   WideCharToMultiByte(CP_ACP,   0,   wszBuff,   -1,   szBuff,   39,   NULL,   NULL);  
  ODS("CFlashSink   QI:   ");   ODS(szBuff);   ODS("\n");  
  return   E_NOTIMPL;  
  }  
  }          
          STDMETHOD_(ULONG,   AddRef)()  
  {  
  TCHAR   szBuff[255];  
  wsprintf(szBuff,   "CFlashSink   refcount   increased   to   %d\n",   m_dwRef+1);  
  ODS(szBuff);  
  return   ++m_dwRef;  
  }          
          STDMETHOD_(ULONG,   Release)()  
  {  
  TCHAR   szBuff[255];  
  if   (--m_dwRef   ==   0)    
  {    
  ODS("Deleting   CFlashSink\n");  
  delete   this;    
  return   0;    
  }  
  wsprintf(szBuff,   "CFlashSink   refcount   reduced   to   %d\n",   m_dwRef);  
  ODS(szBuff);  
  return   m_dwRef;  
  }  
   
  //   IDispatch   method  
  STDMETHOD(GetTypeInfoCount)(UINT*   pctinfo)  
  {   ODS("GetTypeInfoCount\n");   return   E_NOTIMPL;   }  
   
  STDMETHOD(GetTypeInfo)(UINT   iTInfo,  
                          LCID   lcid,  
                          ITypeInfo**   ppTInfo)  
  {   ODS("GetTypeInfo\n");   return   E_NOTIMPL;   }  
   
  STDMETHOD(GetIDsOfNames)(REFIID   riid,  
                          LPOLESTR*   rgszNames,  
                          UINT   cNames,  
                          LCID   lcid,  
                          DISPID*   rgDispId)  
  {   ODS("GetIDsOfNames\n");   return   E_NOTIMPL;   }  
                   
  STDMETHOD(Invoke)(DISPID   dispIdMember,  
                          REFIID   riid,  
                          LCID   lcid,  
                          WORD   wFlags,  
  DISPPARAMS   __RPC_FAR   *pDispParams,  
                          VARIANT   __RPC_FAR   *pVarResult,  
                          EXCEPINFO   __RPC_FAR   *pExcepInfo,  
                          UINT   __RPC_FAR   *puArgErr)  
  {  
   
  if   (!pVarResult)  
  {  
  return   E_POINTER;  
  }  
  switch(dispIdMember)  
  {  
  case   0x7a6:  
  ODS("OnProgress");  
  break;  
  case   0x96:  
  ODS("FSCommand");  
  break;  
  case   DISPID_READYSTATECHANGE:  
  ODS("OnReadyStateChange");  
  break;  
  default:  
  TCHAR   szBuff[255];  
  wsprintf(szBuff,"dispIdMember=%d",dispIdMember);  
  ODS(szBuff);  
  return   DISP_E_MEMBERNOTFOUND;  
  }  
  return   NOERROR;  
  }            
          HRESULT   OnReadyStateChange   (  
                  long   newState   )  
  {  
  ODS("OnReadyStateChange");  
  }  
          HRESULT   OnProgress   (  
                  long   percentDone   )  
  {  
  ODS("OnProgress");  
  }  
          HRESULT   FSCommand   (  
                  _bstr_t   command,  
                  _bstr_t   args   )  
  {  
  ODS("FSCommand");  
  }  
  private:  
  ShockwaveFlashObjects::IShockwaveFlash*   m_pFlash;  
  DWORD   m_dwRef;  
  LPCONNECTIONPOINT   m_pCP;  
  HRESULT   m_hrConnected;  
  DWORD   m_dwCookie;  
  };Top

10 楼masterz(www.fruitfruit.com)回复于 2002-12-06 16:51:54 得分 0

//   Global   Variables:  
  HINSTANCE   hInst; //   current   instance  
  TCHAR   szTitle[MAX_LOADSTRING]; //   The   title   bar   text  
  TCHAR   szWindowClass[MAX_LOADSTRING]; //   The   title   bar   text  
  CAxWindow   m_container;  
  CFlashSink   g_FlashSink;  
  using   namespace   ShockwaveFlashObjects;  
  IShockwaveFlash*   shwaveflash;  
   
  //   Foward   declarations   of   functions   included   in   this   code   module:  
  ATOM MyRegisterClass(HINSTANCE   hInstance);  
  BOOL InitInstance(HINSTANCE,   int);  
  LRESULT   CALLBACK WndProc(HWND,   UINT,   WPARAM,   LPARAM);  
   
  int   APIENTRY   WinMain(HINSTANCE   hInstance,  
                                            HINSTANCE   hPrevInstance,  
                                            LPSTR           lpCmdLine,  
                                            int               nCmdShow)  
  {  
  MSG   msg;  
  //   Initialize   global   strings  
  wsprintf(szTitle,"use   flash   control   in   sdk   exe");  
  wsprintf(szWindowClass,"flashinsdk");  
  MyRegisterClass(hInstance);  
  CoInitialize(NULL);  
  //   Perform   application   initialization:  
  if   (!InitInstance   (hInstance,   nCmdShow))    
  return   FALSE;  
  while   (GetMessage(&msg,   NULL,   0,   0))    
  {  
  TranslateMessage(&msg);  
  DispatchMessage(&msg);  
  }  
  CoUninitialize();  
  return   msg.wParam;  
  }  
     
  //     FUNCTION:   MyRegisterClass()  
  //     PURPOSE:   Registers   the   window   class.  
  ATOM   MyRegisterClass(HINSTANCE   hInstance)  
  {  
  WNDCLASSEX   wcex;  
  wcex.cbSize   =   sizeof(WNDCLASSEX);    
  wcex.style =   CS_HREDRAW   |   CS_VREDRAW;  
  wcex.lpfnWndProc =   (WNDPROC)WndProc;  
  wcex.cbClsExtra =   0;  
  wcex.cbWndExtra =   0;  
  wcex.hInstance =   hInstance;  
  wcex.hIcon =   LoadIcon(NULL,   IDI_APPLICATION);  
  wcex.hCursor =   LoadCursor(NULL,   IDC_ARROW);  
  wcex.hbrBackground =   (HBRUSH)(COLOR_WINDOW+1);  
  wcex.lpszMenuName =   NULL;//(LPCSTR)IDC_FLSH;  
  wcex.lpszClassName =   szWindowClass;  
  wcex.hIconSm =   LoadIcon(NULL,   IDI_APPLICATION);  
  return   RegisterClassEx(&wcex);  
  }  
   
  //       FUNCTION:   InitInstance(HANDLE,   int)  
  //       PURPOSE:   Saves   instance   handle   and   creates   main   window  
  BOOL   InitInstance(HINSTANCE   hInstance,   int   nCmdShow)  
  {  
        HWND   hWnd;  
        hInst   =   hInstance;   //   Store   instance   handle   in   our   global   variable  
  AtlAxWinInit();  
        hWnd   =   CreateWindow(szWindowClass,   szTitle,   WS_OVERLAPPEDWINDOW,  
              CW_USEDEFAULT,   0,   CW_USEDEFAULT,   0,   NULL,   NULL,   hInstance,   NULL);  
        if   (!hWnd)  
              return   FALSE;  
        ShowWindow(hWnd,   nCmdShow);  
        UpdateWindow(hWnd);  
        return   TRUE;  
  }  
  HWND   heditfilepath;  
   
  LRESULT   CALLBACK   WndProc(HWND   hWnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  int   wmId,   wmEvent;  
  PAINTSTRUCT   ps;  
  HDC   hdc;  
  TCHAR   szHello[MAX_LOADSTRING];  
  wsprintf(szHello,"use   flash   control   in   sdk");  
  HWND   hbtnstart;  
  RECT   rc;  
  switch   (message)    
  {  
  case   WM_CREATE:  
  GetClientRect(hWnd,   &rc   );  
  rc.top   =   (rc.bottom+rc.top)/2;  
  m_container.Create(   hWnd,   rc,   LPCTSTR("ShockwaveFlash.ShockwaveFlash.1"),   WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL   );//create   a   browser   control  
  hbtnstart=CreateWindow("BUTTON","play",WS_CHILD|WS_VISIBLE,0,0,120,30,hWnd,(HMENU)0x100,hInst,0);  
  heditfilepath=CreateWindow("EDIT","filepath",WS_CHILD|WS_VISIBLE|WS_BORDER,0,40,420,30,hWnd,(HMENU)0x101,hInst,0);  
  SetWindowText(heditfilepath,"c:\\downloads\\radin\\flash\\2.1.swf");  
  m_container.QueryControl(   __uuidof(IShockwaveFlash),   reinterpret_cast<void**>(&shwaveflash)   );  
  g_FlashSink.Init(shwaveflash);  
  break;  
  case   WM_SIZING:  
  GetClientRect(hWnd,   &rc   );  
  rc.top   =   (rc.bottom+rc.top)/2;  
  m_container.MoveWindow(&rc,true);  
  break;  
  case   WM_COMMAND:  
  wmId         =   LOWORD(wParam);    
  wmEvent   =   HIWORD(wParam);    
  //   Parse   the   menu   selections:  
  switch   (wmId)  
  {  
  case   0x100:  
  {  
  ODS("0x100");  
  char   buf[256];  
  GetWindowText(heditfilepath,buf,255);  
  _bstr_t   bstr((char*)buf);  
  ODS(buf);  
  //bstr=_bstr_t("c:\\2.1.swf");  
  shwaveflash->put_Movie(bstr);   //   you   have   to   change   the   path   here  
  shwaveflash->Play();  
  }  
  break;  
  default:  
        return   DefWindowProc(hWnd,   message,   wParam,   lParam);  
  }  
  break;  
  case   WM_PAINT:  
  hdc   =   BeginPaint(hWnd,   &ps);  
  RECT   rt;  
  GetClientRect(hWnd,   &rt);  
  DrawText(hdc,   szHello,   strlen(szHello),   &rt,   DT_CENTER);  
  EndPaint(hWnd,   &ps);  
  break;  
  case   WM_DESTROY:  
  PostQuitMessage(0);  
  break;  
  default:  
  return   DefWindowProc(hWnd,   message,   wParam,   lParam);  
        }  
        return   0;  
  }Top

11 楼dragon_zqw(追逐我的梦)回复于 2002-12-07 12:00:13 得分 0

致masterz:  
  我要如何才能屏蔽MicroMedia自带的右键菜单,而改用我自己的右键菜单,  
  以及怎样才能探测到正在播放的swf已经播放完毕呢?望赐教!Top

12 楼flood75(9527)回复于 2002-12-07 13:51:02 得分 0

Flash有控件:  
  http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab  
  使用OCX控制你总该会吧,Top

13 楼dragon_zqw(追逐我的梦)回复于 2002-12-08 08:19:10 得分 0

谢谢大家,谢谢masterz兄!对于我提出的右键菜单问题以及如何查询当前播放状态,希望大家能够继续帮我一下!如果有英文资料,能帮我贴上来也好  
  !Top

相关问题

  • VC++ SDK一问
  • 关于vc++读文件。。。服了。。师兄们帮帮我
  • 如何在vc中显示Flash动画
  • 如何在VC中显示Gif动画?
  • VC中处理FLASH动画的问题。
  • About Win32 SDK & VC++/MFC??
  • SDK VC 工具栏
  • GIF动画问题,SDK。怎么更新GIF祯
  • 如何扩展VC6的动画控件??扩展VC动画控件...
  • 各位师兄~

关键词

  • win32
  • 控件
  • flash
  • hr
  • null
  • pcpc
  • cflashsink
  • pflash
  • shockwaveflashobjects
  • dshockwaveflashevents

得分解答快速导航

  • 帖主:dragon_zqw
  • hzwanglw
  • shesh
  • masterz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo