您的位置:首页 > 其它

vc 开发简单的flash 播放器

2011-04-08 14:14 176 查看
1。新建一个基于对话框的程序,添加变量: 
 int m_nTimer;  //Timer时间控制 
    bool timerflag;  //Timer启用的标志 
    bool screenflag;  //全屏的标志   
    bool playflag;  //有无文件打开的标志 
    CRect flashrect;  //记录Shockwaveflash组件的矩形区域 
    WINDOWPLACEMENT m_FlashPos;  //记录Shockwaveflash组件的状态 
    WINDOWPLACEMENT m_WndPos;  //记录对话框窗口的状态 
    在对话框的构造函数中将所有bool变量赋值为FALSE。 
 2。在窗体上添加按钮(为了实现简单,俺的功能调用都是通过按钮实现的),设置Capture分别为:“打开” 、“播放”、“暂停”、“停止”、“重播”、“后退”、“前进”、“末帧”、“快退”、“快进”、“放大”、“缩小”、“还原”、“关闭”、“全屏”。 
 3。添加一个Shockwaveflash控件,为Shockwaveflash控件添加变量flash; 
    添加一个CSliderCtrl控件,ID为IDC_SLIDER1。 
 4。为各个按钮添加处理代码: 
  
 “打开”按钮代码: 
 char szFilters[]="MyType Files (*.swf)|*.swf||"; 
 CFileDialog fileDlg (TRUE, "swf", "*.swf",OFN_FILEMUSTEXIST| OFN_HIDEREADONLY,szFilters, this); 
 if( fileDlg.DoModal ()==IDOK )   
    { 
        CString pathName = fileDlg.GetPathName();   
   flash.put_Movie(pathName);   
   playflag=TRUE; 
    
   if(!timerflag) 
   { 
  m_nTimer=SetTimer(1,100,0);  //开启计时器 
  timerflag=!timerflag; 
   } 
 } 
     
   “播放”按钮代码: 
   flash.Play(); 
     
    “暂停”按钮代码: 
    flash.Stop(); 
     
    “停止”按钮代码: 
    flash.Rewind();     
  flash.Stop();  
   
  “重播”按钮代码: 
 flash.Rewind(); 
 flash.Play(); 
   
  “后退”按钮代码: 
 flash.Back(); 
   
  “前进”按钮代码: 
 flash.Forward(); 
   
  “末帧”按钮代码: 
  flash.GotoFrame(flash.get_TotalFrames()-1);  
 “快退”按钮代码: 
  int current=flash.CurrentFrame(); 
  if(current>4) 
  { 
  current-=5; 
  flash.GotoFrame(current); 
  } 
  else 
  { 
  flash.put_FrameNum(0); 
  } 
  
  “快进”按钮代码: 
  int current=flash.CurrentFrame(); 
  int i=flash.get_FrameNum(); 
  if(current<flash.get_TotalFrames()-5) 
  { 
  current+=5; 
  flash.GotoFrame(current); 
  } 
  else 
  { 
  flash.put_FrameNum(flash.get_TotalFrames()-1); 
  } 
  
  “放大”按钮代码: 
flash.Zoom(50); 
  
  “缩小”按钮代码: 
  flash.Zoom(200);    
  
  “还原”按钮代码: 
  flash.Zoom(0); 
   
 “关闭”按钮代码: 
 flash.put_Movie("http://"); 
 KillTimer(m_nTimer);  //停止计时器 
 CSliderCtrl *m_pSlider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);   
 m_pSlider->SetPos(0);  //滑块置零 
 timerflag=FALSE;//////////////////////////////// 
 playflag=FALSE;//////////////////////////////// 
                        
 5。添加Slider 控件的消息处理函数PreTranslateMessage()响应的消息NM_RELEASEDCAPTURE 
 CSliderCtrl *m_pSlider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);  
 int num=m_pSlider->GetPos(); 
 num=num*flash.get_TotalFrames()/100; 
    flash.GotoFrame(num); 
      
     //////////////////////////////////////////////////////////////////////////////////// 
     将下面代码添加到,Dialog类的OnInitDialog()函数中 
     CSliderCtrl *m_pSlider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); 
 m_pSlider->SetRange(0,100);  //设定Slider的活动范围是0~100 
  
 6。添加Dialog类的OnTimer()函数响应消息WM_TIMER 
 在OnTimer()函数中添加代码: 
 CSliderCtrl *m_pSlider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); 
 m_pSlider->SetPos(flash.CurrentFrame()*100/flash.get_TotalFrames()); 
  
 7。在Dialog类的DestroyWindow()函数中添加代码: 
 if(timerflag) 
  KillTimer(m_nTimer);  
      
      
 8。“全屏”按钮代码: 
 if(!screenflag && playflag) 
 { 
 GetWindowPlacement(&m_WndPos);  
 flash.GetWindowPlacement(&m_FlashPos);   
 flash.GetWindowRect(flashrect);   
 CSliderCtrl *m_pSlider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); 
 m_pSlider->ShowWindow(SW_HIDE ); 
 HWND hwnd=this->GetSafeHwnd(); 
 LONG style=GetWindowLongPtr(hwnd,GWL_STYLE); 
 SetWindowLongPtr(hwnd,GWL_STYLE,style-WS_CAPTION ); 
 CClientDC dc(this); 
 this->MoveWindow(0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES)); 
 flash.SetWindowPos(&CWnd::wndTop ,0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES),SWP_SHOWWINDOW); 
 screenflag=TRUE;//////////////////// 
 }  
   
 9。响应按键ESC消息,取消全屏。 
 重载对话框的PreTranslateMessage()函数,在函数中添加如下代码: 
 if(pMsg->message == WM_KEYDOWN)  
 { 
  if(pMsg->wParam==VK_ESCAPE) 
  { 
   if(screenflag) 
   { 
   HWND hwnd=this->GetSafeHwnd(); 
   LONG style=GetWindowLongPtr(hwnd,GWL_STYLE); 
   SetWindowLongPtr(hwnd,GWL_STYLE,style+WS_CAPTION ); 
   ShowWindow(SW_HIDE); 
   SetWindowPlacement(&m_WndPos); 
   flash.MoveWindow(flashrect.left,flashrect.top,flashrect.Width(),flashrect.Height(),1); 
flash.SetWindowPlacement(&m_FlashPos); 
   screenflag=FALSE;  
   CSliderCtrl *m_pSlider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); 
   m_pSlider->ShowWindow(SW_SHOW ); 
   } 
  } 
 } 
  
 全屏和取消全屏的代码,是俺自己拼凑所得,充其量只是个模拟效果,而且还是个模拟的不好的效果,如果有高手见到,希望能够博您一笑。另外,在笑过之后还请您不吝赐教。俺一定以十二亿万分的热情接受
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  flash dialog timer 活动