⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwnd.cpp

📁 PPC流行的播放软件gsplayer源码2.24版
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		DrawStatus(m_hMemDC);

	// 僺乕僋
	SetRect(&rc, PEEK_LEFT, PEEK_TOP, 
		PEEK_LEFT + PEEK_WIDTH, PEEK_TOP + PEEK_HEIGHT);
	if (NeedToRepaint(&pps->rcPaint, &rc))
		DrawPeek(m_hMemDC);

	// 僗僩儕乕儉僞僀僩儖
	SetRect(&rc, STREAM_TITLE_LEFT, m_nStreamTitleTop, 
		STREAM_TITLE_LEFT + m_nStreamTitleWidth, m_nStreamTitleTop + m_nStreamTitleHeight);
	if (NeedToRepaint(&pps->rcPaint, &rc))
		DrawStreamTitle(m_hMemDC);

	// 儃儕儏乕儉僗儔僀僟乕
	SetRect(&rc, m_nVolumeSliderLeft, m_nVolumeSliderTop, 
		m_nVolumeSliderLeft + m_nVolumeSliderWidth, m_nVolumeSliderTop + m_nVolumeSliderHeight);
	if (NeedToRepaint(&pps->rcPaint, &rc))
		DrawVolumeSlider(m_hMemDC);

	// 僂僀儞僪僂DC偵揮憲
	BitBlt(hDC, pps->rcPaint.left, pps->rcPaint.top,
		RECT_WIDTH(&pps->rcPaint), RECT_HEIGHT(&pps->rcPaint),
		m_hMemDC, pps->rcPaint.left, pps->rcPaint.top, SRCCOPY);
}

void CMainWnd::OnClose()
{
	// 儗僕儏乕儉忣曬傪曐懚偟偰偍偔
	if (m_pOptions->m_fResume) {
		m_pOptions->m_nResumeTrack = m_nCurrent;
		m_pOptions->m_nResumeTime = MAP_GetCurrent(m_hMap);
	}

	// 僼傽僀儖傪暵偠傞
	Close();
	MAP_AudioDeviceClose(m_hMap);

	// 儕僜乕僗傪夝曻偡傞
	if (m_pPlayListDlg) {
		m_pPlayListDlg->Close();
		delete m_pPlayListDlg;
		m_pPlayListDlg = NULL;
	}

	// 儕僗僩傪曐懚偡傞
	if (m_pOptions->m_fSaveDefList) {
		TCHAR szPath[MAX_PATH];
		GetDefPlayListPath(szPath);
		SavePlayList(szPath);
	}

	// 僞僗僋僩儗僀傾僀僐儞偺嶍彍
	RegisterTrayIcon(FALSE);

	// 僂僀儞僪僂傪尦偵栠偡
	ShowWindow(m_hWnd, SW_HIDE);
	SetWindowPos(m_hWnd, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE);
	ShowWindow(m_hWnd, SW_RESTORE);

	// 忬懺傪曐懚偡傞
	Save();

#ifdef REGISTER_WAKE_EVENT
	if (m_fRegEvent) {
		TCHAR sz[MAX_PATH];
		GetModuleFileName(GetInst(), sz, MAX_PATH);
		CeRunAppAtEvent(sz, NULL);
	}
#endif

	// 僂僀儞僪僂偺攋婞
	DeleteImages();
	KillTimer(m_hWnd, ID_TIMER_TIME);
	KillTimer(m_hWnd, ID_TIMER_SUSPEND);
	KillTimer(m_hWnd, ID_TIMER_SCROLLTITLE);
	KillTimer(m_hWnd, ID_TIMER_SCROLLSTREAM);
	KillTimer(m_hWnd, ID_TIMER_STREAMINGWAIT);
	KillTimer(m_hWnd, ID_TIMER_SLEEPTIMER);
	DestroyWindow(m_hWnd);
}

void CMainWnd::OnDestroy()
{
	PostQuitMessage(0);
}

void CMainWnd::OnTimer(UINT uID)
{
	if (uID == ID_TIMER_TIME) {
		UpdateTime();
	}
	else if (uID == ID_TIMER_SUSPEND) {
#ifdef _WIN32_WCE
		// 僒僗儁儞僪杊巭
		if (MAP_GetStatus(m_hMap) == MAP_STATUS_PLAY) {
			//keybd_event(VK_F4, 0x1e, KEYEVENTF_KEYUP, 1);
			SystemIdleTimerReset();
		}
#endif
	}
	else if (uID == ID_TIMER_VOLUME) {
		KillTimer(m_hWnd, ID_TIMER_VOLUME);
		m_fDrawVolume = FALSE;
		UpdateTitle();
	}
	else if (uID == ID_TIMER_VOLSLIDER) {
		DWORD dwVolume;
		waveOutGetVolume(NULL, &dwVolume);
		if (m_dwCurrentVolume != dwVolume)
			UpdateVolumeSlider();
	}
	else if (uID == ID_TIMER_SCROLLTITLE) {
		if (++m_nTitleWait >=  SCROLL_TITLE_INITWAIT) {
			if (m_pOptions->m_fScrollTitle) {
				if (!m_fDrawVolume) {
					if (m_nTitleLen - SCROLL_TITLE_MARGIN > m_nTitleWidth) {
						m_nTitlePos += SCROLL_TITLE_INTERVAL;
						UpdateTitle();
					}
				}
			}
		}
	}
	else if (uID == ID_TIMER_SCROLLSTREAM) {
		if (++m_nStreamTitleWait >=  SCROLL_TITLE_INITWAIT) {
			FILEINFO* pInfo = GetInfo(GetCurrentFile());
			if (pInfo && IsURL(pInfo->szPath)) {
				if (m_nStreamTitleLen - SCROLL_TITLE_MARGIN > m_nStreamTitleWidth) {
					m_nStreamTitlePos += SCROLL_TITLE_INTERVAL;
					UpdateStreamTitle();
				}
			}
		}
	}
	else if (uID == ID_TIMER_STREAMINGWAIT) {
		UpdateStreamTitle();
		if (MAP_GetStatus(m_hMap) != MAP_STATUS_WAIT)
			KillTimer(m_hWnd, ID_TIMER_STREAMINGWAIT);
	}
	else if (uID == ID_TIMER_SLEEPTIMER) {
		if (m_pOptions->m_nSleepTime != -1) {
			DWORD dwTick = GetTickCount();
			m_pOptions->m_nSleepTime += dwTick - m_pOptions->m_dwSleepLast;
			m_pOptions->m_dwSleepLast = dwTick;

			if (m_pOptions->m_nSleepTime > m_pOptions->m_nSleepMinutes * 60 * 1000) {
				m_pOptions->m_nSleepTime = -1;
				KillTimer(m_hWnd, ID_TIMER_SLEEPTIMER);

				OnPlayStop();
#ifdef _WIN32_WCE
				if (m_pOptions->m_fSleepPowerOff) {
					MAP_AudioDeviceClose(m_hMap);
					keybd_event(VK_OFF, 0, KEYEVENTF_SILENT, 0);
					keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP | KEYEVENTF_SILENT, 0);
				}
#endif
			}
		}
	}
}

void CMainWnd::OnLButtonDown(int x, int y)
{
#ifdef _WIN32_WCE
	if (GetAsyncKeyState(VK_MENU) & 0x8000) {
		return;
	}
	else if (x >= BTN_LEFT && y >= m_nBtnTop &&
#else
	if (x >= BTN_LEFT && y >= m_nBtnTop &&
#endif
		x < BTN_LEFT + BTN_WIDTH * m_nBtnMax &&
		y < m_nBtnTop + BTN_HEIGHT) {

		// 儃僞儞偺埵抲傪専弌
		m_fPressed = TRUE;
		m_nPressed = (x - BTN_LEFT) / BTN_WIDTH;

		RECT rc = {
			BTN_LEFT + BTN_WIDTH * m_nPressed,
			m_nBtnTop,
			BTN_LEFT + BTN_WIDTH * (m_nPressed + 1),
			m_nBtnTop + BTN_HEIGHT
		};
		InvalidateRect(m_hWnd, &rc, TRUE);
		UpdateWindow(m_hWnd);

		SetCapture(m_hWnd);
		return;
	}
	else if (x >= TIME_LEFT &&
		x < TIME_LEFT + TIME_WIDTH &&
		y >= TIME_TOP && 
		y < TIME_TOP + TIME_HEIGHT) {
		// 帪崗昞帵儕僶乕僗
		m_pOptions->m_fTimeReverse = !m_pOptions->m_fTimeReverse;
		UpdateTime();
	}
	else if (x >= PEEK_LEFT &&
		x < PEEK_LEFT + PEEK_WIDTH &&
		y >= PEEK_TOP && 
		y < PEEK_TOP + PEEK_HEIGHT) {
		// 僺乕僋僶乕昞帵愗傝懼偊
		m_nPeek[0] = m_nPeek[1] = 0;
		UpdatePeek();
		m_pOptions->m_fDrawPeek = !m_pOptions->m_fDrawPeek;
		MAP_SetScanPeek(m_hMap, m_pOptions->m_fDrawPeek);
	}
	else if (x >= SEEK_LEFT &&
		y >= m_nTitleTop &&
		x < SEEK_LEFT + m_nSeekWidth &&
		y < DISP_TOP + m_nDispHeight) {
		// 僔乕僋
		int nDur = MAP_GetDuration(m_hMap);
		int nSeek = int(((double)x - SEEK_LEFT) / m_nSeekWidth * nDur);
		Seek(nSeek);
		return;
	}
	else if (x >= m_nVolumeSliderLeft &&
		y >= m_nVolumeSliderTop &&
		x < m_nVolumeSliderLeft + m_nVolumeSliderWidth &&
		y < m_nVolumeSliderTop + m_nVolumeSliderHeight) {
		// 儃儕儏乕儉僗儔僀僟乕
		m_fVolPressed = TRUE;

		double dPos = x - m_nVolumeSliderLeft - m_nVolumeTrackWidth / 2;
		dPos = dPos * 100 / (m_nVolumeSliderWidth - m_nVolumeTrackWidth);
		dPos = dPos * 0xFFFF / 100;

		if (dPos < 0)
			dPos = 0;
		if (dPos > 0xFFFF)
			dPos = 0xFFFF;

		waveOutSetVolume(NULL, MAKELONG((int)dPos, (int)dPos));

		SetCapture(m_hWnd);
		UpdateVolumeSlider();

		// 昞帵傪峏怴 (悢昩屻偵尦偵栠偡)
		KillTimer(m_hWnd, ID_TIMER_VOLUME);
		m_fDrawVolume = TRUE;
		UpdateTitle();
		SetTimer(m_hWnd, ID_TIMER_VOLUME, TIMER_VOLUME_INTERVAL, NULL);
	}
#ifdef _WIN32_WCE
	// 忋婰埲奜偺傕偺偱僨傿僗僾儗僀埲奜傪僞僢僾偟偨応崌偼
	// 儊僯儏乕傪昞帵
	else if (x < DISP_LEFT ||
			x > DISP_LEFT + DISP_WIDTH ||
			y < DISP_TOP || 
			y > DISP_TOP + DISP_HEIGHT) {
		POINT pt = {x, y};
		OnShowMenu(&pt);
	}
#endif

	// 埵抲傪婰壇偟偰偍偔
	// 僂僀儞僪僂堏摦梡
	m_ptPressed.x = x;
	m_ptPressed.y = y;
}

void CMainWnd::OnMouseMove(int fKey, int x, int y)
{
	if (!(fKey & MK_LBUTTON))
		return;

	// 儃僞儞
	if (m_nPressed != -1) {
		RECT rc = {
			BTN_LEFT + BTN_WIDTH * m_nPressed,
			m_nBtnTop,
			BTN_LEFT + BTN_WIDTH * (m_nPressed + 1),
			m_nBtnTop + BTN_HEIGHT
		};

		if (m_fPressed &&
			(x < rc.left || y < rc.top ||
			x >= rc.right || y >= rc.bottom)) {
			m_fPressed = FALSE;
			InvalidateRect(m_hWnd, &rc, TRUE);
			UpdateWindow(m_hWnd);
		}
		else if (!m_fPressed && 
			(x >= rc.left && y >= rc.top &&
			x < rc.right && y < rc.bottom)) {
			m_fPressed = TRUE;
			InvalidateRect(m_hWnd, &rc, TRUE);
			UpdateWindow(m_hWnd);
		}
	}
	else if (m_fVolPressed) {
		double dPos = x - m_nVolumeSliderLeft - m_nVolumeTrackWidth / 2;
		dPos = dPos * 100 / (m_nVolumeSliderWidth - m_nVolumeTrackWidth);
		dPos = dPos * 0xFFFF / 100;
		if (dPos < 0)
			dPos = 0;
		if (dPos > 0xFFFF)
			dPos = 0xFFFF;

		waveOutSetVolume(NULL, MAKELONG((int)dPos, (int)dPos));

		SetCapture(m_hWnd);
		UpdateVolumeSlider();

		// 昞帵傪峏怴 (悢昩屻偵尦偵栠偡)
		KillTimer(m_hWnd, ID_TIMER_VOLUME);
		m_fDrawVolume = TRUE;
		UpdateTitle();
		SetTimer(m_hWnd, ID_TIMER_VOLUME, TIMER_VOLUME_INTERVAL, NULL);
	}
}

void CMainWnd::OnLButtonUp(int x, int y)
{
	if (m_nPressed != -1) {
		ReleaseCapture();

		if (m_fPressed) {
			// 昞帵傪尦偵栠偡
			m_fPressed = FALSE;
			RECT rc = {
				BTN_LEFT + BTN_WIDTH * m_nPressed,
				m_nBtnTop,
				BTN_LEFT + BTN_WIDTH * (m_nPressed + 1),
				m_nBtnTop + BTN_HEIGHT
			};
			InvalidateRect(m_hWnd, &rc, TRUE);
			UpdateWindow(m_hWnd);

			// 僐儅儞僪憲怣
			int nCommand[] = {
				IDM_FILE_OPEN, 
				IDM_PLAY_PLAYPAUSE,
				IDM_PLAY_STOP,
				IDM_PLAY_PREV,
				IDM_PLAY_REW,
				IDM_PLAY_FF,
				IDM_PLAY_NEXT,
				IDM_SHOW_MENU
			};
			PostMessage(m_hWnd, WM_COMMAND, nCommand[m_nPressed], 0);
		}
	}
	else if (m_fVolPressed) {
		ReleaseCapture();
	}
#ifdef _WIN32_WCE
	else if (GetAsyncKeyState(VK_MENU) & 0x8000) {
		POINT pt = {x, y};
		OnShowMenu(&pt);
	}
#endif
	
	m_fPressed = FALSE;
	m_nPressed = -1;
	m_ptPressed.x = -1;
	m_ptPressed.y = -1;
	m_fVolPressed = FALSE;
}

void CMainWnd::OnMove(int x, int y)
{
	RECT rc;
	GetWindowRect(m_hWnd, &rc);

	RECT rcWork;
	SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWork, FALSE);
	
	int nLeft = rc.left;
	int nTop = rc.top;
	if (nLeft > rcWork.left - WINDOW_FIT_MARGIN && nLeft < rcWork.left + WINDOW_FIT_MARGIN)
		nLeft = rcWork.left;
	else if (nLeft + RECT_WIDTH(&rc) > rcWork.left + RECT_WIDTH(&rcWork) - WINDOW_FIT_MARGIN &&
			nLeft + RECT_WIDTH(&rc) < rcWork.left + RECT_WIDTH(&rcWork) + WINDOW_FIT_MARGIN)
		nLeft = rcWork.left + RECT_WIDTH(&rcWork) - RECT_WIDTH(&rc);

	if (nTop > rcWork.top - WINDOW_FIT_MARGIN && nTop < rcWork.top + WINDOW_FIT_MARGIN)
		nTop = rcWork.top;
	else if (nTop + RECT_HEIGHT(&rc) > rcWork.top + RECT_HEIGHT(&rcWork) - WINDOW_FIT_MARGIN &&
			nTop + RECT_HEIGHT(&rc) < rcWork.top + RECT_HEIGHT(&rcWork) + WINDOW_FIT_MARGIN)
		nTop = rcWork.top + RECT_HEIGHT(&rcWork) - RECT_HEIGHT(&rc);

	if (nLeft != rc.left || nTop != rc.top)
		MoveWindow(m_hWnd, nLeft, nTop, RECT_WIDTH(&rc), RECT_HEIGHT(&rc), TRUE);
}

void CMainWnd::OnSize(UINT nType, int cx, int cy)
{
	if (m_pOptions->m_fTrayIcon && nType == SIZE_MINIMIZED) {
		RegisterTrayIcon(TRUE);
		ShowWindow(m_hWnd, SW_HIDE);
	}
	else if (nType == SIZE_RESTORED) {
		InvalidateRect(m_hWnd, NULL, TRUE);
		UpdateWindow(m_hWnd);
	}
}

void CMainWnd::OnActivate(int nActive, BOOL fMinimized, HWND hwndPrevious)
{
}

void CMainWnd::OnHotKey(int nId, UINT fuModifiers, UINT uVirtKey)
{
}

#ifdef _WIN32_WCE
void CMainWnd::OnCopyData(COPYDATASTRUCT* pcds)
{
	if (pcds->dwData == WM_DROPFILES) {
		DeleteAllFile();

		LPTSTR pszPath = (LPTSTR)pcds->lpData;		
		while (TRUE) {
			DWORD dw = GetFileAttributes(pszPath);
			if (dw & FILE_ATTRIBUTE_DIRECTORY)
				AddDir(pszPath);
			else {
				if (IsPlayList(pszPath))
					LoadPlayList(pszPath);
				else
					AddFile(pszPath);
			}

			pszPath += _tcslen(pszPath);
			if (*pszPath != NULL || *(pszPath + 1) == NULL)
				break;

			pszPath++;
		}
		
		if (m_pPlayListDlg)
			m_pPlayListDlg->UpdatePlayList();

		Play();
	}
}
#else
void CMainWnd::OnDropFiles(HDROP hDrop)
{
	DeleteAllFile();
	AddDropFiles(hDrop);
	Play();
}

void CMainWnd::AddDropFiles(HDROP hDrop)
{
	TCHAR szFile[MAX_PATH];
	int nIndex = 0;

	// 僼傽僀儖傪捛壛偟偰偄偔
	while (DragQueryFile(hDrop, nIndex++, szFile, MAX_PATH)) {
		DWORD dwAttr = GetFileAttributes(szFile);
		if (dwAttr != 0xFFFFFFFF) {
			if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
				AddDir(szFile);
			else if(IsPlayList(szFile))
				LoadPlayList(szFile);
			else
				AddFile(szFile);
		}
	}
	DragFinish(hDrop);
	
	if (m_pPlayListDlg)
		m_pPlayListDlg->UpdatePlayList();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -