程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC制作簡易flash播放器

VC制作簡易flash播放器

編輯:vc教程

近日朋友問在VC中如何控制Flash文件,俺也沒有做過以前,俺是新手再次聲明,很菜的,嘿嘿,但俺也期望成為大俠,能夠叱詫風雲,仗劍行走江湖,路遇不平排憂解難,英雄美女,朝陽晚霞,青山綠水。。。哈,不好意思,寫著寫著就歪了。但恐怕所有Man都有過這個理想吧。

 轉入正題,嗯。。。對了,朋友有難不能不幫,況且還是位MM,哈。。。俺只好上網找資料了,在baidu搜了一下資料不是很多啊,後來看到有一個用vb做的DIY  flash播放器的,就看了一下(就是下面貼的這個)。實現步驟挺簡單的,使用ShockwaveFlash控件實現,轉化成vc實現。

 嚯嚯。。。可以向MM邀功了。。。

 實現步驟如下:

 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 );
   }

  }
 }
 
 全屏和取消全屏的代碼,是俺自己拼湊所得,充其量只是個模擬效果,而且還是個模擬的不好的效果,如果有高手見到,希望能夠博您一笑。另外,在笑過之後還請您不吝賜教。俺一定以十二億萬分的熱情接受。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved