📄 wmp4playerview.cpp
字号:
// wmp4playerView.cpp : implementation of the CWmp4playerView class//#include "stdafx.h"#include "wmp4player.h"#include "wmp4playerDoc.h"#include "wmp4playerView.h"#include "our_config_file.h"#include <SDL.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CWmp4playerViewIMPLEMENT_DYNCREATE(CWmp4playerView, CFormView)BEGIN_MESSAGE_MAP(CWmp4playerView, CFormView) //{{AFX_MSG_MAP(CWmp4playerView) ON_BN_CLICKED(IDC_BROWSE_BUTTON, OnBrowseButton) ON_CBN_DROPDOWN(IDC_COMBO1, OnDropdownCombo1) ON_CBN_DBLCLK(IDC_COMBO1, OnDblclkCombo1) ON_COMMAND(ID_ENTER, OnEnter) ON_CBN_SETFOCUS(IDC_COMBO1, OnSetfocusCombo1) ON_CBN_KILLFOCUS(IDC_COMBO1, OnKillfocusCombo1) ON_CBN_SELENDOK(IDC_COMBO1, OnSelendokCombo1) ON_BN_CLICKED(IDC_PLAY_BUTTON, OnPlayButton) ON_BN_CLICKED(IDC_PAUSE_BUTTON, OnPauseButton) ON_BN_CLICKED(IDC_STOP_BUTTON, OnStopButton) ON_WM_TIMER() ON_COMMAND(ID_AUDIO_MUTE, OnAudioMute) //}}AFX_MSG_MAP ON_WM_HSCROLL() ON_MESSAGE(WM_SDL_KEY, OnSdlKey)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CWmp4playerView construction/destructionCWmp4playerView::CWmp4playerView() : CFormView(CWmp4playerView::IDD){ //{{AFX_DATA_INIT(CWmp4playerView) //}}AFX_DATA_INIT // TODO: add construction code here m_nTimer = 0; m_timer_slider_selected = 0;}CWmp4playerView::~CWmp4playerView(){ theApp.StopSession(1);}void CWmp4playerView::DoDataExchange(CDataExchange* pDX){ CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWmp4playerView) DDX_Control(pDX, IDC_SLIDER2, m_volume_slider); DDX_Control(pDX, IDC_STOP_BUTTON, m_stop_button); DDX_Control(pDX, IDC_PAUSE_BUTTON, m_pause_button); DDX_Control(pDX, IDC_PLAY_BUTTON, m_play_button); DDX_Control(pDX, IDC_SLIDER1, m_time_slider); DDX_Control(pDX, IDC_COMBO1, m_combobox); //}}AFX_DATA_MAP}BOOL CWmp4playerView::PreCreateWindow(CREATESTRUCT& cs){ // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs m_play_button.LoadBitmaps("PLAY_BUTTONU", "PLAY_BUTTOND", NULL, "PLAY_BUTTON_DIS"); m_pause_button.LoadBitmaps("PAUSE_BUTTONU", "PAUSE_BUTTOND", NULL, "PAUSE_BUTTON_DIS"); m_stop_button.LoadBitmaps("STOP_BUTTONU", "STOP_BUTTOND", NULL, "STOP_BUTTON_DIS"); return CFormView::PreCreateWindow(cs);}void CWmp4playerView::OnInitialUpdate(){ CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_time_slider.SetRange(0, 100);#if 0 m_play_button.EnableWindow(FALSE); m_pause_button.EnableWindow(FALSE); m_stop_button.EnableWindow(FALSE); m_time_slider.EnableWindow(FALSE);#endif}void CWmp4playerView::OnUpdate (CView* pSender, LPARAM lHint, CObject* pHint){ CFormView::OnUpdate(pSender, lHint, pHint); int seekable = 0; int timer_on = 0; int volume = 0; if (theApp.m_mp4if != NULL) { OutputDebugString("On update and have app\n"); seekable = theApp.m_mp4if->is_seekable(); int state = theApp.m_mp4if->get_state(); TRACE1("State is %d", state); if (state == MP4IF_STATE_PLAY) { // Playing m_play_button.SetState(TRUE); m_pause_button.SetState(FALSE); m_stop_button.SetState(FALSE); m_pause_button.EnableWindow(TRUE); m_stop_button.EnableWindow(TRUE); timer_on = 1; } else { // Stopped or paused m_play_button.SetState(FALSE); m_pause_button.SetState(state == MP4IF_STATE_PAUSE); m_stop_button.SetState(state == MP4IF_STATE_STOP); m_play_button.EnableWindow(TRUE); m_pause_button.EnableWindow(FALSE); m_stop_button.EnableWindow(FALSE); } if (theApp.m_mp4if->has_audio()) { volume = 1; } } else { m_pause_button.SetState(FALSE); m_play_button.SetState(FALSE); m_stop_button.SetState(FALSE); m_play_button.EnableWindow(FALSE); m_pause_button.EnableWindow(FALSE); m_stop_button.EnableWindow(FALSE); } m_volume_slider.SetPos(config.get_config_value(CONFIG_VOLUME)); if (volume == 0) { m_volume_slider.EnableWindow(FALSE); } else { m_volume_slider.EnableWindow(TRUE); } m_time_slider.EnableWindow(seekable); if (seekable == 0) m_time_slider.SetPos(0); if (timer_on) { m_nTimer = SetTimer(1, 500, NULL); } else { if (m_nTimer != 0) { KillTimer(m_nTimer); m_nTimer = 0; } } }/////////////////////////////////////////////////////////////////////////////// CWmp4playerView diagnostics#ifdef _DEBUGvoid CWmp4playerView::AssertValid() const{ CFormView::AssertValid();}void CWmp4playerView::Dump(CDumpContext& dc) const{ CFormView::Dump(dc);}CWmp4playerDoc* CWmp4playerView::GetDocument() // non-debug version is inline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWmp4playerDoc))); return (CWmp4playerDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CWmp4playerView message handlersvoid CWmp4playerView::OnBrowseButton() { // TODO: Add your control notification handler code here theApp.OnFileOpen();}void CWmp4playerView::OnDropdownCombo1() { // TODO: Add your control notification handler code here m_combobox.ResetContent(); POSITION pos; pos = theApp.m_played.GetTailPosition(); if (pos == NULL) { } else { while (pos != NULL) { CString val = theApp.m_played.GetPrev(pos); int retval = m_combobox.AddString(val); } } }void CWmp4playerView::OnDblclkCombo1() { // TODO: Add your control notification handler code here }void CWmp4playerView::OnEnter() { // TODO: Add your command handler code here CString result; OutputDebugString("Captured enter\n"); int sel = m_combobox.GetCurSel(); if (sel == CB_ERR) { m_combobox.GetWindowText(result); } else { m_combobox.GetLBText(sel, result); } if (!result.IsEmpty()) { theApp.StartSession(result); }}void CWmp4playerView::OnSetfocusCombo1() { // TODO: Add your control notification handler code here OutputDebugString("Set focus combo 1\n");}void CWmp4playerView::OnKillfocusCombo1() { OutputDebugString("kill focus Combo1\n"); // TODO: Add your control notification handler code here }void CWmp4playerView::OnSelendokCombo1() { // TODO: Add your control notification handler code here CString result; int sel = m_combobox.GetCurSel(); if (sel != CB_ERR) { m_combobox.GetLBText(sel, result); if (!result.IsEmpty()) { theApp.StartSession(result); } }}void CWmp4playerView::OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ){ if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER1) { switch (nSBCode) { case TB_LINEUP: case TB_LINEDOWN: case TB_PAGEUP: case TB_PAGEDOWN: case TB_THUMBPOSITION: case TB_THUMBTRACK: case TB_TOP: case TB_BOTTOM: m_timer_slider_selected = 1; break; case TB_ENDTRACK: m_timer_slider_selected = 0; if (theApp.m_mp4if == NULL || theApp.m_mp4if->is_seekable() == 0) { m_time_slider.SetPos(0); break; } double seek_time = theApp.m_mp4if->get_max_time(); nPos = m_time_slider.GetPos(); TRACE1("Pos is %d\n", nPos); seek_time *= nPos; seek_time /= 100.0; theApp.m_mp4if->seek_to(seek_time); break; } } else if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER2) { if (nSBCode == TB_ENDTRACK) { config.set_config_value(CONFIG_VOLUME, m_volume_slider.GetPos()); TRACE1("Volume to %d\n", m_volume_slider.GetPos()); if (theApp.m_mp4if && theApp.m_mp4if->has_audio()) { theApp.m_mp4if->client_read_config(); } } }}void CWmp4playerView::OnPlayButton() { if (theApp.m_mp4if && theApp.m_mp4if->get_state() != MP4IF_STATE_PLAY) { theApp.m_mp4if->play(); } OnUpdate(NULL, 0, NULL);}void CWmp4playerView::OnPauseButton() { if (theApp.m_mp4if && theApp.m_mp4if->get_state() == MP4IF_STATE_PLAY) { theApp.m_mp4if->pause(); } OnUpdate(NULL, 0, NULL); }void CWmp4playerView::OnStopButton() { if (theApp.m_mp4if && theApp.m_mp4if->get_state() == MP4IF_STATE_PLAY) { theApp.m_mp4if->stop(); } OnUpdate(NULL, 0, NULL);}void CWmp4playerView::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default // TRACE1("OnTimer %d\n", nIDEvent); if (m_timer_slider_selected == 0) { uint64_t curr_time; double max_time; max_time = theApp.m_mp4if->get_max_time(); if (max_time != 0.0) { if (theApp.m_mp4if->get_current_time(&curr_time)) { uint64_t time = (uint64_t)(max_time * 1000.0); curr_time *= 100; curr_time /= time; m_time_slider.SetPos(curr_time); } } } CFormView::OnTimer(nIDEvent);}void CWmp4playerView::OnAudioMute() { // TODO: Add your command handler code here theApp.OnAudioMute(); OnUpdate(NULL, 0, NULL);}void CWmp4playerView::OnCloseSession(void){ OutputDebugString("Got window close\n");}afx_msg LRESULT CWmp4playerView::OnSdlKey(WPARAM key, LPARAM mod){ TRACE2("SDL key %x %x\n", key, mod); int screen_size; int volume; CMP4If *mp4if = theApp.m_mp4if; if (mp4if == NULL) return 0; switch (key) { case SDLK_c: if ((mod & (KMOD_LCTRL | KMOD_RCTRL)) != 0) { theApp.StopSession(); } break; case SDLK_x: if ((mod & (KMOD_LCTRL | KMOD_RCTRL)) != 0) { // don't know how to do this yet... } break; case SDLK_UP: volume = mp4if->get_audio_volume(); volume += 10; if (volume > 100) volume = 100; config.set_config_value(CONFIG_VOLUME, volume); mp4if->set_audio_volume(volume); break; case SDLK_DOWN: volume = mp4if->get_audio_volume(); volume -= 10; if (volume < 0) volume = 0; config.set_config_value(CONFIG_VOLUME, volume); mp4if->set_audio_volume(volume); break; case SDLK_SPACE: if (mp4if->get_state() == MP4IF_STATE_PLAY) { mp4if->pause(); } else { mp4if->play(); } break; case SDLK_END: // They want the end - just close, or go on to the next playlist. theApp.StopSession(); break; case SDLK_HOME: mp4if->seek_to(0.0); break; case SDLK_RIGHT: if (mp4if->is_seekable()) { uint64_t play_time; if (mp4if->get_current_time(&play_time) == FALSE) return 0; double ptime, maxtime; play_time += 10 * M_LLU; ptime = (double)#ifdef _WIN32 (int64_t)#endif play_time; ptime /= 1000.0; maxtime = mp4if->get_max_time(); if (ptime < maxtime) { mp4if->seek_to(ptime); } } break; case SDLK_LEFT: if (mp4if->is_seekable()) { uint64_t play_time; if (mp4if->get_current_time(&play_time) == FALSE) return 0; double ptime; if (play_time > 10 * M_LLU) { play_time -= 10 * M_LLU; ptime = (double)#ifdef _WIN32 (int64_t)#endif play_time; ptime /= 1000.0; } else ptime = 0.0; mp4if->seek_to(ptime); } break; case SDLK_PAGEUP: screen_size = mp4if->get_screen_size(); if (screen_size < 2 && mp4if->get_fullscreen_state() == FALSE) { screen_size++; theApp.OnMediaVideo(screen_size + ID_MEDIA_VIDEO_50); } break; case SDLK_PAGEDOWN: screen_size = mp4if->get_screen_size(); if (screen_size >= 1 && mp4if->get_fullscreen_state() == 0) { screen_size--; theApp.OnMediaVideo(screen_size + ID_MEDIA_VIDEO_50); } break; case SDLK_RETURN: if ((mod & (KMOD_LALT | KMOD_RALT)) != 0) { mp4if->set_fullscreen_state(TRUE); } break; case SDLK_ESCAPE: mp4if->set_fullscreen_state(FALSE); break; default: break; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -