• 基于MFC的Media Player播放器的制作(4---功能实现代码)


    |   版权声明:本文为博主原创文章,未经博主允许不得转载。

      

    PandaPlayerDlg.h

     1 // PandaPlayerDlg.h : header file
     2 //
     3 //{{AFX_INCLUDES()
     4 #include "wmpplayer4.h"
     5 #include "wmpcontrols.h"
     6 #include "wmpsettings.h"
     7 //}}AFX_INCLUDES
     8 
     9 #if !defined(AFX_PANDAPLAYERDLG_H__BD44EB72_E7B8_4CCE_831C_6781A9FDFD2B__INCLUDED_)
    10 #define AFX_PANDAPLAYERDLG_H__BD44EB72_E7B8_4CCE_831C_6781A9FDFD2B__INCLUDED_
    11 
    12 #if _MSC_VER > 1000
    13 #pragma once
    14 #endif // _MSC_VER > 1000
    15 
    16 /////////////////////////////////////////////////////////////////////////////
    17 // CPandaPlayerDlg dialog
    18 
    19 class CPandaPlayerDlg : public CDialog
    20 {
    21 // Construction
    22 public:
    23     CPandaPlayerDlg(CWnd* pParent = NULL);    // standard constructor
    24 
    25     //文件关联对象的变量声明
    26     CWMPControls setControl;
    27     CWMPSettings setVolume;
    28     CSliderCtrl *pSlidCtrl;
    29     CSliderCtrl    sliderVolume;
    30 
    31 
    32     // Dialog Data
    33     //{{AFX_DATA(CPandaPlayerDlg)
    34     enum { IDD = IDD_PANDAPLAYER_DIALOG };
    35     CWMPPlayer4    m_ActiveMovie;
    36     //}}AFX_DATA
    37 
    38     // ClassWizard generated virtual function overrides
    39     //{{AFX_VIRTUAL(CPandaPlayerDlg)
    40     protected:
    41     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    42     //}}AFX_VIRTUAL
    43 
    44 // Implementation
    45 protected:
    46     HICON m_hIcon;
    47 
    48     void listDisplay(CString a[]);
    49 
    50     // Generated message map functions
    51     //{{AFX_MSG(CPandaPlayerDlg)
    52     virtual BOOL OnInitDialog();
    53     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    54     afx_msg void OnPaint();
    55     afx_msg HCURSOR OnQueryDragIcon();
    56     afx_msg void OnExit();
    57     afx_msg void OnFullscreen();
    58     afx_msg void OnOpen();
    59     afx_msg void OnPlay();
    60     afx_msg void OnPause();
    61     afx_msg void OnStop();
    62     afx_msg void OnGo();
    63     afx_msg void OnBack();
    64     afx_msg void OnAbout();
    65     afx_msg void OnOpenfiles();
    66     afx_msg void OnMute();
    67     afx_msg void OnLower();
    68     afx_msg void OnUpper();
    69     afx_msg void OnOutofmemoryVolumeslider();
    70     afx_msg void OnNext();
    71     afx_msg void OnPrevious();
    72     afx_msg void OnLoop();
    73     afx_msg void OnOrder();
    74     afx_msg void OnRandom();
    75     afx_msg void OnTimer(UINT nIDEvent);
    76     afx_msg void OnFullscr();
    77     afx_msg void OnOnlyplay();
    78     //}}AFX_MSG
    79     DECLARE_MESSAGE_MAP()
    80 };
    81 
    82 //{{AFX_INSERT_LOCATION}}
    83 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    84 
    85 #endif // !defined(AFX_PANDAPLAYERDLG_H__BD44EB72_E7B8_4CCE_831C_6781A9FDFD2B__INCLUDED_)


    PandaPlayerDlg.cpp

      1 // PandaPlayerDlg.cpp : implementation file
      2 //
      3 
      4 #include "stdafx.h"
      5 #include "PandaPlayer.h"
      6 #include "PandaPlayerDlg.h"
      7 
      8 #ifdef _DEBUG
      9 #define new DEBUG_NEW
     10 #undef THIS_FILE
     11 static char THIS_FILE[] = __FILE__;
     12 #endif
     13 
     14 //文件数组大小预定义
     15 #define N 100
     16 
     17 //全局变量声明
     18 static int count = 0;
     19 static int times = 0;
     20 static int modelFlag = 0;
     21 static int flag = 0;
     22 
     23 //0表示
     24 static int playStatus = 1;
     25 static int pauseStatus = 0;
     26 static int stopStatus = 0;
     27 
     28 static int volumeSlider = 0;
     29 static long maxVloume = 0;
     30 static bool listFlag = true;
     31 CString filesPath[N] = {""};
     32 time_t t;
     33 
     34 
     35 /////////////////////////////////////////////////////////////////////////////
     36 // CAboutDlg dialog used for App About
     37 
     38 class CAboutDlg : public CDialog
     39 {
     40 public:
     41     CAboutDlg();
     42 
     43 // Dialog Data
     44     //{{AFX_DATA(CAboutDlg)
     45     enum { IDD = IDD_ABOUTBOX };
     46     //}}AFX_DATA
     47 
     48     // ClassWizard generated virtual function overrides
     49     //{{AFX_VIRTUAL(CAboutDlg)
     50     protected:
     51     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
     52     //}}AFX_VIRTUAL
     53 
     54 // Implementation
     55 protected:
     56     //{{AFX_MSG(CAboutDlg)
     57     //}}AFX_MSG
     58     DECLARE_MESSAGE_MAP()
     59 };
     60 
     61 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
     62 {
     63     //{{AFX_DATA_INIT(CAboutDlg)
     64     //}}AFX_DATA_INIT
     65 }
     66 
     67 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
     68 {
     69     CDialog::DoDataExchange(pDX);
     70     //{{AFX_DATA_MAP(CAboutDlg)
     71     //}}AFX_DATA_MAP
     72 }
     73 
     74 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
     75     //{{AFX_MSG_MAP(CAboutDlg)
     76         // No message handlers
     77     //}}AFX_MSG_MAP
     78 END_MESSAGE_MAP()
     79 
     80 /////////////////////////////////////////////////////////////////////////////
     81 // CPandaPlayerDlg dialog
     82 
     83 CPandaPlayerDlg::CPandaPlayerDlg(CWnd* pParent /*=NULL*/)
     84     : CDialog(CPandaPlayerDlg::IDD, pParent)
     85 {
     86     //{{AFX_DATA_INIT(CPandaPlayerDlg)
     87         // NOTE: the ClassWizard will add member initialization here
     88     //}}AFX_DATA_INIT
     89     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
     90     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
     91 }
     92 
     93 void CPandaPlayerDlg::DoDataExchange(CDataExchange* pDX)
     94 {
     95     CDialog::DoDataExchange(pDX);
     96     //{{AFX_DATA_MAP(CPandaPlayerDlg)
     97     DDX_Control(pDX, IDC_OCX1, m_ActiveMovie);
     98     //}}AFX_DATA_MAP
     99 }
    100 
    101 BEGIN_MESSAGE_MAP(CPandaPlayerDlg, CDialog)
    102     //{{AFX_MSG_MAP(CPandaPlayerDlg)
    103     ON_WM_SYSCOMMAND()
    104     ON_WM_PAINT()
    105     ON_WM_QUERYDRAGICON()
    106     ON_BN_CLICKED(IDC_EXIT, OnExit)
    107     ON_BN_CLICKED(IDC_FULLSCREEN, OnFullscreen)
    108     ON_BN_CLICKED(IDC_OPEN, OnOpen)
    109     ON_BN_CLICKED(IDC_PLAY, OnPlay)
    110     ON_BN_CLICKED(IDC_PAUSE, OnPause)
    111     ON_BN_CLICKED(IDC_STOP, OnStop)
    112     ON_BN_CLICKED(IDC_GO, OnGo)
    113     ON_BN_CLICKED(IDC_BACK, OnBack)
    114     ON_BN_CLICKED(IDC_ABOUT, OnAbout)
    115     ON_BN_CLICKED(IDC_OPENFILES, OnOpenfiles)
    116     ON_BN_CLICKED(IDC_MUTE, OnMute)
    117     ON_BN_CLICKED(IDC_LOWER, OnLower)
    118     ON_BN_CLICKED(IDC_UPPER, OnUpper)
    119     ON_NOTIFY(NM_OUTOFMEMORY, IDC_VOLUMESLIDER, OnOutofmemoryVolumeslider)
    120     ON_BN_CLICKED(IDC_NEXT, OnNext)
    121     ON_BN_CLICKED(IDC_PREVIOUS, OnPrevious)
    122     ON_BN_CLICKED(IDC_LOOP, OnLoop)
    123     ON_BN_CLICKED(IDC_ORDER, OnOrder)
    124     ON_BN_CLICKED(IDC_RANDOM, OnRandom)
    125     ON_WM_TIMER()
    126     ON_BN_CLICKED(IDC_FULLSCR, OnFullscr)
    127     ON_BN_CLICKED(IDC_ONLYPLAY, OnOnlyplay)
    128     //}}AFX_MSG_MAP
    129 END_MESSAGE_MAP()
    130 
    131 /////////////////////////////////////////////////////////////////////////////
    132 // CPandaPlayerDlg message handlers
    133 
    134 BOOL CPandaPlayerDlg::OnInitDialog()
    135 {
    136     CDialog::OnInitDialog();
    137 
    138     //添加文件关联
    139     setControl = static_cast<CWMPControls>(m_ActiveMovie.GetControls());
    140     setVolume = m_ActiveMovie.GetSettings();
    141 
    142     //文件列表的初始化的状态为列表处于关闭的状态
    143     SetWindowPos(NULL,0,0,542,435,SWP_NOMOVE);
    144 
    145     //初始化音量的滑块条的初始位置
    146     //sliderVolume.SetRange(0, 100, true);
    147     pSlidCtrl = (CSliderCtrl*)GetDlgItem(IDC_VOLUMESLIDER);
    148     pSlidCtrl->SetPos(setVolume.GetVolume());
    149 
    150     //得到初始化时的声音滑块条的位置坐标
    151     volumeSlider = pSlidCtrl->GetPos();
    152 
    153     //得到最大的音量值
    154     maxVloume = setVolume.GetVolume();// * 2
    155 
    156     //初始化文件数组
    157     filesPath[0] = "";
    158 
    159     // Add "About..." menu item to system menu.
    160 
    161     // IDM_ABOUTBOX must be in the system command range.
    162     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    163     ASSERT(IDM_ABOUTBOX < 0xF000);
    164 
    165     CMenu* pSysMenu = GetSystemMenu(FALSE);
    166     if (pSysMenu != NULL)
    167     {
    168         CString strAboutMenu;
    169         strAboutMenu.LoadString(IDS_ABOUTBOX);
    170         if (!strAboutMenu.IsEmpty())
    171         {
    172             pSysMenu->AppendMenu(MF_SEPARATOR);
    173             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    174         }
    175     }
    176 
    177     // Set the icon for this dialog.  The framework does this automatically
    178     //  when the application's main window is not a dialog
    179     SetIcon(m_hIcon, TRUE);            // Set big icon
    180     SetIcon(m_hIcon, FALSE);        // Set small icon
    181     
    182     // TODO: Add extra initialization here
    183     
    184     return TRUE;  // return TRUE  unless you set the focus to a control
    185 }
    186 
    187 void CPandaPlayerDlg::OnSysCommand(UINT nID, LPARAM lParam)
    188 {
    189     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    190     {
    191         CAboutDlg dlgAbout;
    192         dlgAbout.DoModal();
    193     }
    194     else
    195     {
    196         CDialog::OnSysCommand(nID, lParam);
    197     }
    198 }
    199 
    200 // If you add a minimize button to your dialog, you will need the code below
    201 //  to draw the icon.  For MFC applications using the document/view model,
    202 //  this is automatically done for you by the framework.
    203 
    204 void CPandaPlayerDlg::OnPaint() 
    205 {
    206     if (IsIconic())
    207     {
    208         CPaintDC dc(this); // device context for painting
    209 
    210         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    211 
    212         // Center icon in client rectangle
    213         int cxIcon = GetSystemMetrics(SM_CXICON);
    214         int cyIcon = GetSystemMetrics(SM_CYICON);
    215         CRect rect;
    216         GetClientRect(&rect);
    217         int x = (rect.Width() - cxIcon + 1) / 2;
    218         int y = (rect.Height() - cyIcon + 1) / 2;
    219 
    220         // Draw the icon
    221         dc.DrawIcon(x, y, m_hIcon);
    222     }
    223     else
    224     {
    225         CDialog::OnPaint();
    226     }
    227 }
    228 
    229 // The system calls this to obtain the cursor to display while the user drags
    230 //  the minimized window.
    231 HCURSOR CPandaPlayerDlg::OnQueryDragIcon()
    232 {
    233     return (HCURSOR) m_hIcon;
    234 }
    235 
    236 //打开文件
    237 void CPandaPlayerDlg::OnOpen() 
    238 {
    239     // TODO: Add your control notification handler code here
    240     char   szFileFilter[]="Mp3   File&(*.mp3)|*.mp3|"
    241         "Wma   File((*.wma)|*.wma|"
    242         "Video   File(*.dat)|*.dat|"
    243         "Wave   File(*.wav)|*.wav|"
    244         "AVI   File(*.avi)|*.avi|"
    245         "Movie   File(*.mov)|*.mov|"
    246         "Media   File(*.mmm)|*.mmm|"
    247         "Mid   File(*.mid *.rmi)|*.mid *.rmi|"
    248         "MPEG   File(*.mpeg)|*.mpeg|"
    249         "All   File(*.*)|*.*|| ";//文件类型过滤
    250         CFileDialog   dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
    251         if(dlg.DoModal()==IDOK)
    252         {
    253             CString strFilePath = dlg.GetPathName();
    254             //strFilePath.MakeUpper();
    255             filesPath[count++] = strFilePath;
    256             m_ActiveMovie.SetUrl(strFilePath);
    257             times = count;
    258         }
    259 }
    260 
    261 //列表播放文件项目的显示
    262 void CPandaPlayerDlg::listDisplay(CString fileUrl[])
    263 {
    264     int index = times;
    265     for(int i = 0; i < index; i++)
    266     {
    267         
    268     }
    269 }
    270 
    271 //播放文件
    272 void CPandaPlayerDlg::OnPlay() 
    273 {
    274     // TODO: Add your control notification handler code here
    275     setControl.play();
    276     //如果是播放状态的时候,播放则为1,暂停和停止均为0
    277     playStatus = 1;
    278     pauseStatus = 0;
    279     stopStatus = 0;
    280 }
    281 
    282 //暂停播放
    283 void CPandaPlayerDlg::OnPause() 
    284 {
    285     // TODO: Add your control notification handler code here
    286     setControl.pause();
    287     //如果暂停为真,则暂停为1,播放和停止为0
    288     playStatus = 0;
    289     pauseStatus = 1;
    290     stopStatus = 0;
    291 }
    292 
    293 //停止播放
    294 void CPandaPlayerDlg::OnStop() 
    295 {
    296     // TODO: Add your control notification handler code here
    297     setControl.stop();
    298     //如果停止为真,则停止为1,播放和暂停为0
    299     playStatus = 0;
    300     pauseStatus = 0;
    301     stopStatus = 1;
    302 
    303 }
    304 
    305 //快进
    306 void CPandaPlayerDlg::OnGo() 
    307 {
    308     // TODO: Add your control notification handler code here
    309     double CurrPosition = setControl.GetCurrentPosition();
    310     setControl.SetCurrentPosition(CurrPosition+2);
    311 }
    312 
    313 //快退
    314 void CPandaPlayerDlg::OnBack() 
    315 {
    316     // TODO: Add your control notification handler code here
    317     double CurrPosition = setControl.GetCurrentPosition();
    318     setControl.SetCurrentPosition(CurrPosition-2);
    319 }
    320 
    321 //关于框的调用函数
    322 void CPandaPlayerDlg::OnAbout() 
    323 {
    324     // TODO: Add your control notification handler code here
    325     CAboutDlg aboutDlg;
    326     aboutDlg.DoModal();
    327 }
    328 
    329 //文件列表框的弹出和关闭函数
    330 void CPandaPlayerDlg::OnOpenfiles() 
    331 {
    332     // TODO: Add your control notification handler code here
    333     listFlag=!listFlag;
    334     if(listFlag)
    335     {
    336         //两个数字分别表示宽和高
    337         SetWindowPos(NULL,0,0,542,435,SWP_NOMOVE);
    338     }
    339     else
    340     {
    341         //文件列表的三个函数在wmpcontrols.h,wmpplaylist.h和wmpmedia.h中
    342         //分别是CWMPMedia GetCurrentItem();void SetCurrentItem(LPDISPATCH newValue);void playItem(LPDISPATCH pIWMPMedia);    
    343         SetWindowPos(NULL,0,0,730,435,SWP_NOMOVE);
    344         CString str;
    345     }
    346 }
    347 
    348 //声音控制的静音函数
    349 void CPandaPlayerDlg::OnMute() 
    350 {
    351     // TODO: Add your control notification handler code here
    352     if(setVolume.GetMute())
    353     {
    354         setVolume.SetMute(false);
    355     }
    356     else
    357     {
    358         setVolume.SetMute(true);
    359     }
    360 }
    361 
    362 //降低音量函数
    363 void CPandaPlayerDlg::OnLower() 
    364 {
    365     // TODO: Add your control notification handler code here
    366     long currVolume = setVolume.GetVolume();
    367     if(setVolume.GetMute())
    368     {
    369         MessageBox(_T("已处于静音状态,不能降低音量"), _T("警告"), MB_OK);
    370     }
    371     else
    372     {
    373         setVolume.SetVolume(currVolume-2);
    374     }
    375     //减少音量之后重新设置音量的滑动条的位置坐标
    376     volumeSlider = pSlidCtrl->GetPos();
    377     flag = 1;
    378     OnOutofmemoryVolumeslider();
    379 }
    380 
    381 //音量增加函数
    382 void CPandaPlayerDlg::OnUpper() 
    383 {
    384     // TODO: Add your control notification handler code here
    385     long currVolume = setVolume.GetVolume();
    386     if(setVolume.GetMute())
    387     {
    388         MessageBox(_T("已处于静音状态,不能增加音量"), _T("警告"), MB_OK);
    389     }
    390     else
    391     {
    392         setVolume.SetVolume(currVolume+2);
    393     }
    394     //增加音量之后重新设置音量的滑动条的位置坐标
    395     volumeSlider = pSlidCtrl->GetPos();
    396     flag = 2;
    397     OnOutofmemoryVolumeslider();
    398 }
    399 
    400 //音量滑块条的控制
    401 void CPandaPlayerDlg::OnOutofmemoryVolumeslider()
    402 {
    403     // TODO: Add your control notification handler code here
    404     int indexSlider;
    405     if(flag == 1 || flag == 2)
    406     {
    407         pSlidCtrl->SetPos(setVolume.GetVolume());
    408     }
    409     else
    410     {
    411         indexSlider = pSlidCtrl->GetPos();
    412         //如果indexSlider-volumeSlider>0,说明滑动条往声音调大的范围滑动
    413         if(indexSlider-volumeSlider>=0)
    414         {
    415             setVolume.SetVolume(setVolume.GetVolume()+((indexSlider-volumeSlider)/maxVloume)*2);
    416         }
    417         else
    418         {
    419             setVolume.SetVolume(setVolume.GetVolume()-((indexSlider-volumeSlider)/maxVloume)*2);
    420         }
    421     }
    422 }
    423 
    424 //退出函数
    425 void CPandaPlayerDlg::OnExit() 
    426 {
    427     // TODO: Add your control notification handler code here
    428     setControl.stop();
    429     exit(0);
    430 }
    431 
    432 //窗口关闭函数
    433 void CPandaPlayerDlg::OnFullscreen() 
    434 {
    435     // TODO: Add your control notification handler code here
    436     static int flag1 = 0;
    437     if(flag1%2==0)
    438     {
    439         //将状态标志设为暂停的标志(暂停为1, 播放和停止为0)
    440         pauseStatus = 1;
    441         playStatus = 0;
    442         stopStatus = 0;
    443         m_ActiveMovie.ShowWindow(false);
    444     }
    445     else
    446     {
    447         //将状态标志设为播放的标志(播放为1, 暂停和停止为0)
    448         pauseStatus = 0;
    449         playStatus = 1;
    450         stopStatus = 0;
    451         m_ActiveMovie.ShowWindow(true);
    452     }
    453     flag1++;
    454 
    455 }
    456 
    457 //全屏模式
    458 void CPandaPlayerDlg::OnFullscr() 
    459 {
    460     // TODO: Add your control notification handler code here
    461     if(m_ActiveMovie.GetFullScreen())
    462     {
    463         m_ActiveMovie.SetFullScreen(false);
    464     }
    465     else
    466     {
    467         m_ActiveMovie.SetFullScreen(true);
    468     }
    469 }
    470 
    471 //下一曲函数
    472 void CPandaPlayerDlg::OnNext() 
    473 {
    474     // TODO: Add your control notification handler code here
    475     if(modelFlag==1)
    476     {
    477         if(filesPath[times+1] == "")
    478         {
    479             times = 0;
    480             CString playFiles = filesPath[times++];
    481             m_ActiveMovie.SetUrl(playFiles);
    482         }
    483         else
    484         {
    485             CString playFiles = filesPath[times++];
    486             m_ActiveMovie.SetUrl(playFiles);
    487         }
    488     }
    489     else
    490     {
    491         if(filesPath[times+1] == "")
    492         {
    493             MessageBox(_T("已到达文件列表尾"),_T("警告"),MB_OK);
    494         }
    495         else
    496         {
    497             CString playFiles = filesPath[times++];
    498             m_ActiveMovie.SetUrl(playFiles);
    499         }
    500     }
    501 }
    502 
    503 //上一曲函数
    504 void CPandaPlayerDlg::OnPrevious() 
    505 {
    506     // TODO: Add your control notification handler code here
    507     if(modelFlag==1)
    508     {
    509         if(times-1 < 0)
    510         {
    511             times = count;
    512             CString playFiles = filesPath[times--];
    513             m_ActiveMovie.SetUrl(playFiles);
    514         }
    515         else
    516         {
    517             CString playFiles = filesPath[times--];
    518             m_ActiveMovie.SetUrl(playFiles);
    519         }
    520     }
    521     else
    522     {
    523         if(times-1 < 0)
    524         {
    525             MessageBox(_T("已到达文件列表头"),_T("Warning"),MB_OK);
    526         }
    527         else
    528         {
    529             CString playFiles = filesPath[times--];
    530             m_ActiveMovie.SetUrl(playFiles);
    531         }
    532     }
    533 }
    534 
    535 //循环播放
    536 void CPandaPlayerDlg::OnLoop()
    537 {
    538     // TODO: Add your control notification handler code here
    539     modelFlag = 1;
    540     if(filesPath[0] == "")
    541     {
    542         MessageBox(_T("列表无文件!"),_T("警告"),MB_OK);
    543         CPandaPlayerDlg::OnOpen();
    544     }
    545     else
    546     {
    547         if(setControl.GetCurrentPosition() == 0)
    548         {
    549             //此时说明播放已经停止,可以进入下一曲播放了
    550             if(filesPath[times+1] != "")
    551             {
    552                 CString playFiles = filesPath[times++];
    553                 m_ActiveMovie.SetUrl(playFiles);
    554                 setControl.SetCurrentPosition(0.01);
    555             }
    556             else
    557             {
    558                 times = 0;
    559                 CString playFiles = filesPath[times++];
    560                 m_ActiveMovie.SetUrl(playFiles);
    561                 setControl.SetCurrentPosition(0.01);
    562             }
    563         }
    564         else
    565         {
    566             //通过标志来判断是否进行那种类型的播放状态
    567             if(playStatus == 1 && pauseStatus == 0 && stopStatus == 0)
    568                 setControl.play();
    569             else if(pauseStatus == 1 && playStatus == 0 && stopStatus == 0)
    570                 setControl.pause();
    571             else if(stopStatus == 1 && playStatus == 0 && pauseStatus == 0)
    572                 setControl.stop();
    573             else
    574             {
    575                 MessageBox(_T("出现错误"),_T("ERROR"),MB_OK);
    576             }
    577         }
    578     }
    579     SetTimer(1,20,NULL);
    580 }
    581 
    582 //顺序播放
    583 void CPandaPlayerDlg::OnOrder() 
    584 {
    585     // TODO: Add your control notification handler code here
    586     modelFlag = 2;
    587     if(filesPath[0] == "")
    588     {
    589         MessageBox(_T("列表无文件!"),_T("警告"),MB_OK);
    590         CPandaPlayerDlg::OnOpen();
    591     }
    592     else
    593     {
    594         if(setControl.GetCurrentPosition() == 0)
    595         {
    596             //此时说明播放已经停止,可以进入下一曲播放了
    597             //首先判断列表是否为空
    598             if(filesPath[times+1] != "")
    599             {
    600                 CString playFiles = filesPath[times++];
    601                 m_ActiveMovie.SetUrl(playFiles);
    602                 setControl.SetCurrentPosition(0.01);
    603             }
    604             else
    605             {
    606                 MessageBox(_T("已到列表末尾!"),_T("Warning"),MB_OK);
    607                 CString playFiles = filesPath[0];
    608                 m_ActiveMovie.SetUrl(playFiles);
    609                 setControl.SetCurrentPosition(0.01);
    610             }
    611         }
    612         else
    613         {
    614             if(playStatus == 1 && pauseStatus == 0 && stopStatus == 0)
    615                 setControl.play();
    616             else if(pauseStatus == 1 && playStatus == 0 && stopStatus == 0)
    617                 setControl.pause();
    618             else if(stopStatus == 1 && playStatus == 0 && pauseStatus == 0)
    619                 setControl.stop();
    620             else
    621             {
    622                 MessageBox(_T("出现错误"),_T("ERROR"),MB_OK);
    623             }
    624         }
    625     }
    626     SetTimer(2,20,NULL);
    627 }
    628 
    629 //随机播放
    630 void CPandaPlayerDlg::OnRandom() 
    631 {
    632     // TODO: Add your control notification handler code here
    633     modelFlag = 3;
    634     if(filesPath[0] == "")
    635     {
    636         MessageBox(_T("列表无文件!"),_T("警告"),MB_OK);
    637         CPandaPlayerDlg::OnOpen();
    638     }
    639     else
    640     {
    641         if(setControl.GetCurrentPosition() == 0)
    642         {
    643             //此时说明播放已经停止,可以进入下一曲播放了
    644             srand((unsigned)time(&t));
    645             int index = rand() % count + 1;    
    646             CString playFiles = filesPath[index];
    647             m_ActiveMovie.SetUrl(playFiles);
    648             setControl.SetCurrentPosition(0.01);
    649         }
    650         else
    651         {
    652             if(playStatus == 1 && pauseStatus == 0 && stopStatus == 0)
    653                 setControl.play();
    654             else if(pauseStatus == 1 && playStatus == 0 && stopStatus == 0)
    655                 setControl.pause();
    656             else if(stopStatus == 1 && playStatus == 0 && pauseStatus == 0)
    657                 setControl.stop();
    658             else
    659             {
    660                 MessageBox(_T("出现错误"),_T("ERROR"),MB_OK);
    661             }
    662         }
    663     }
    664     SetTimer(3,20,NULL);
    665 }
    666 
    667 
    668 //单曲循环播放
    669 void CPandaPlayerDlg::OnOnlyplay() 
    670 {
    671     // TODO: Add your control notification handler code here
    672     modelFlag = 4;
    673     if(filesPath[0] == "")
    674     {
    675         MessageBox(_T("列表无文件!"),_T("警告"),MB_OK);
    676         CPandaPlayerDlg::OnOpen();
    677     }
    678     else
    679     {
    680         if(setControl.GetCurrentPosition() == 0)
    681         {
    682             int index = times;
    683             CString playFiles = filesPath[index];
    684             m_ActiveMovie.SetUrl(playFiles);
    685             setControl.SetCurrentPosition(0.01);
    686         }
    687         else
    688         {
    689             if(playStatus == 1 && pauseStatus == 0 && stopStatus == 0)
    690                 setControl.play();
    691             else if(pauseStatus == 1 && playStatus == 0 && stopStatus == 0)
    692                 setControl.pause();
    693             else if(stopStatus == 1 && playStatus == 0 && pauseStatus == 0)
    694                 setControl.stop();
    695             else
    696             {
    697                 MessageBox(_T("出现错误"),_T("ERROR"),MB_OK);
    698             }
    699         }
    700     }
    701     SetTimer(4,20,NULL);
    702 }
    703 
    704 
    705 //定时器
    706 void CPandaPlayerDlg::OnTimer(UINT nIDEvent) 
    707 {
    708     // TODO: Add your message handler code here and/or call default
    709 
    710     switch(nIDEvent)
    711     {
    712     case 1:
    713         {
    714             KillTimer(1);
    715             OnLoop();
    716             break;
    717         }
    718     case 2:
    719         {
    720             KillTimer(2);
    721             OnOrder();
    722             break;
    723         }
    724     case 3:
    725         {
    726             KillTimer(3);
    727             OnRandom();
    728             break;
    729         }
    730     case 4:
    731         {
    732             KillTimer(4);
    733             OnOnlyplay();
    734             break;
    735         }
    736     }
    737     
    738     CDialog::OnTimer(nIDEvent);
    739 }
  • 相关阅读:
    docker的应用部署
    docker容器的数据卷
    找到最终的安全状态 深搜
    park和unpark方法详解
    docker容器相关命令
    docker鏡像相關命令
    join方法底层实现
    Elasticsearch启动过程错误汇总
    MySQL 8.0.12 报错The table does not comply with the requirements by an external plugin. (errno 3098)
    docker login 密码查看和加密保存
  • 原文地址:https://www.cnblogs.com/geore/p/5792831.html
Copyright © 2020-2023  润新知