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

📄 mainwnd.cpp

📁 PPC流行的播放软件gsplayer源码2.24版
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			pInfo->info.nSamplingRate / 1000, pInfo->info.nChannels == 1 ? _T("MONO") : _T("STEREO"));
		
		COLORREF crBk = SetTextColor(hDC, m_pSkin->GetColor(COLOR_INFO));
		int nOld = SetBkMode(hDC, TRANSPARENT);
		HFONT hBk = (HFONT)SelectObject(hDC, m_hFnt);
		DrawText(hDC, szInfo, -1, &rc, DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);	
		SetTextColor(hDC, crBk);
		SetBkMode(hDC, nOld);
		SelectObject(hDC, hBk);
	}
}

void CMainWnd::DrawPlayOption(HDC hDC)
{
	if (m_pOptions->m_fRepeat == COptions::RepeatAll) {
		ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_PLAYOPT), 0, hDC, PLAYOPT_LEFT, PLAYOPT_TOP, ILD_TRANSPARENT);
	}
	else if (m_pOptions->m_fRepeat == COptions::RepeatOne) {
		int nIndex = (ImageList_GetImageCount(m_pSkin->GetImageList(IMAGELIST_PLAYOPT)) > 2) ? 2 : 0;
		ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_PLAYOPT), nIndex, hDC, PLAYOPT_LEFT, PLAYOPT_TOP, ILD_TRANSPARENT);
	}
	if (m_pOptions->m_fShuffle) {
		ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_PLAYOPT), 1, hDC, PLAYOPT_LEFT, PLAYOPT_TOP + 8, ILD_TRANSPARENT);
	}
}

void CMainWnd::DrawStatus(HDC hDC)
{
	RECT rc = {STATUS_LEFT, m_nStatusTop,
				STATUS_LEFT + STATUS_WIDTH, m_nStatusTop + m_nStatusHeight};
	
	int nIndex;
	MAP_STATUS status = MAP_GetStatus(m_hMap);
	switch (status) {
	case MAP_STATUS_PLAY: nIndex = 1; break;
	case MAP_STATUS_PAUSE: nIndex = 2; break;	
	case MAP_STATUS_WAIT: nIndex = 3; break;	
	default: nIndex = 0;
	}
	
#ifdef _WIN32_WCE_PPC
	ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_STATUS), nIndex, hDC, STATUS_LEFT, 
									m_nStatusTop + (m_nStatusHeight - STATUS_WIDTH) - 2, ILD_TRANSPARENT);
#else
	ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_STATUS), nIndex, hDC, STATUS_LEFT, 
									m_nStatusTop, ILD_TRANSPARENT);
#endif
}

void CMainWnd::DrawTitle(HDC hDC)
{
	if (m_fDrawVolume) {
		DrawVolume(hDC);
		return;
	}

	TCHAR szTitle[MAX_PATH] = {0};
	GetTitle(m_nCurrent, szTitle);

	SIZE size;
	HFONT hBk = (HFONT)SelectObject(hDC, m_hFntTitle);
	GetTextExtentPoint32(hDC, szTitle, _tcslen(szTitle), &size);
	if (size.cx != m_nTitleLen - SCROLL_TITLE_MARGIN) {
		KillTimer(m_hWnd, ID_TIMER_SCROLLTITLE);

		m_nTitlePos = 0;
		m_nTitleWait = 0;
		m_nTitleLen = size.cx + SCROLL_TITLE_MARGIN;
		if (m_nTitleLen - SCROLL_TITLE_MARGIN > m_nTitleWidth)
			SetTimer(m_hWnd, ID_TIMER_SCROLLTITLE, TIMER_SCROLLTITLE_INTERVAL, NULL);
	}
	
	while (m_nTitlePos >= m_nTitleLen)
		m_nTitlePos = m_nTitlePos - m_nTitleLen;

	if (!m_pOptions->m_fScrollTitle || m_nTitlePos == 0 || m_nTitleLen - SCROLL_TITLE_MARGIN < m_nTitleWidth) {
		// 僗僋儘乕儖側偟
		RECT rc = {TITLE_LEFT, m_nTitleTop, 
			TITLE_LEFT + m_nTitleWidth, m_nTitleTop + m_nTitleHeight};

		COLORREF crBk = SetTextColor(hDC, m_pSkin->GetColor(COLOR_TITLE));
		int nOld = SetBkMode(hDC, TRANSPARENT);
		DrawText(hDC, szTitle, -1, &rc, DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);	
		SetTextColor(hDC, crBk);
		SetBkMode(hDC, nOld);
	}
	else {
		// 僗僋儘乕儖偁傝
		RECT rc = {0, 0, m_nTitleLen, m_nTitleHeight};

		HDC hMemDC = CreateCompatibleDC(hDC);
		HBITMAP hBmp = CreateCompatibleBitmap(hDC, m_nTitleLen, m_nTitleHeight);
		SelectObject(hMemDC, hBmp);

		if (m_nTitleLen - m_nTitlePos < m_nTitleWidth) {
			BitBlt(hMemDC, m_nTitlePos, 0, m_nTitleLen - m_nTitlePos,
					m_nTitleHeight, hDC, TITLE_LEFT, m_nTitleTop, SRCCOPY);
			BitBlt(hMemDC, 0, 0, 
				m_nTitleWidth - (m_nTitleLen - m_nTitlePos),
				m_nTitleHeight, hDC, TITLE_LEFT + (m_nTitleLen - m_nTitlePos), m_nTitleTop, SRCCOPY);
		}
		else {
			BitBlt(hMemDC, m_nTitlePos, 0, m_nTitleWidth,
						m_nTitleHeight, hDC, TITLE_LEFT, m_nTitleTop, SRCCOPY);
		}

		COLORREF crBk = SetTextColor(hMemDC, m_pSkin->GetColor(COLOR_TITLE));
		int nOld = SetBkMode(hMemDC, TRANSPARENT);
		HFONT hFnt = (HFONT)SelectObject(hMemDC, m_hFntTitle);
		DrawText(hMemDC, szTitle, -1, &rc, DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);	
		SetTextColor(hMemDC, crBk);
		SetBkMode(hMemDC, nOld);
		SelectObject(hMemDC, hFnt);

		if (m_nTitleLen - m_nTitlePos < m_nTitleWidth) {
			BitBlt(hDC, TITLE_LEFT, m_nTitleTop, m_nTitleLen - m_nTitlePos, 
				m_nTitleHeight, hMemDC, m_nTitlePos, 0, SRCCOPY);
			BitBlt(hDC, TITLE_LEFT + (m_nTitleLen - m_nTitlePos), m_nTitleTop, 
				m_nTitleWidth - (m_nTitleLen - m_nTitlePos), m_nTitleHeight, hMemDC, 0, 0, SRCCOPY);
		}
		else {
			BitBlt(hDC, TITLE_LEFT, m_nTitleTop, m_nTitleWidth, 
				m_nTitleHeight, hMemDC, m_nTitlePos, 0, SRCCOPY);
		}

		DeleteDC(hMemDC);
		DeleteObject(hBmp);
	}
	SelectObject(hDC, hBk);
}

void CMainWnd::DrawVolume(HDC hDC)
{
	SIZE size;
	TCHAR szTitle[MAX_PATH] = {0};
	RECT rc = {TITLE_LEFT, m_nTitleTop, 
			TITLE_LEFT + m_nTitleWidth, m_nTitleTop + m_nTitleHeight};

	DWORD dwVolume;
	waveOutGetVolume(NULL, &dwVolume);
	dwVolume = max(LOWORD(dwVolume), HIWORD(dwVolume));
	dwVolume = dwVolume * 100 / 0xFFFF;
	wsprintf(szTitle, CTempStr(IDS_FMT_DISP_VOLUME), dwVolume);

	COLORREF crBk = SetTextColor(hDC, m_pSkin->GetColor(COLOR_TITLE));
	int nOld = SetBkMode(hDC, TRANSPARENT);
	HFONT hBk = (HFONT)SelectObject(hDC, m_hFntTitle);
	GetTextExtentPoint32(hDC, szTitle, _tcslen(szTitle), &size);
	DrawText(hDC, szTitle, -1, &rc, DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);	
	SetTextColor(hDC, crBk);
	SetBkMode(hDC, nOld);
	SelectObject(hDC, hBk);

#ifdef _WIN32_WCE_PPC
#define VOLBAR_LEFT		80
#define VOLBAR_WIDTH	125
#define VOLBAR_HEIGHT	8
#else
#define VOLBAR_LEFT		50
#define VOLBAR_WIDTH	145
#define VOLBAR_HEIGHT	8
#endif
	if (!dwVolume)
		return;

	int nWidth = VOLBAR_WIDTH * dwVolume / 100;
	RECT rcBar = {TITLE_LEFT + VOLBAR_LEFT, m_nTitleTop + m_nTitleHeight - size.cy + 1,
				TITLE_LEFT + VOLBAR_LEFT + nWidth, m_nTitleTop + m_nTitleHeight};
	HBRUSH hbr = CreateSolidBrush(m_pSkin->GetColor(COLOR_TITLE));
	FillRect(hDC, &rcBar, hbr);
	DeleteObject(hbr);
}

void CMainWnd::DrawPeek(HDC hDC)
{
	if (m_pOptions->m_fDrawPeek) {
		int n = min(PEEK_WIDTH * m_nPeek[0] / 100, PEEK_WIDTH);
		RECT rcLeft = {PEEK_LEFT, PEEK_TOP, PEEK_LEFT + n, PEEK_TOP + 2};
		HBRUSH hbr = CreateSolidBrush(m_pSkin->GetColor(COLOR_PEEKL));
		FillRect(hDC, &rcLeft, hbr);
		DeleteObject(hbr);

		n = min(PEEK_WIDTH * m_nPeek[1] / 100, PEEK_WIDTH);
		RECT rcRight = {PEEK_LEFT, PEEK_TOP + 3, PEEK_LEFT + n, PEEK_TOP + 5};
		hbr = CreateSolidBrush(m_pSkin->GetColor(COLOR_PEEKR));
		FillRect(hDC, &rcRight, hbr);
		DeleteObject(hbr);
	}
}

void CMainWnd::DrawStreamTitle(HDC hDC)
{
	TCHAR szTitle[MAX_URL] = {0};
	GetStreamTitle(szTitle);

	SIZE size;
	HFONT hBk = (HFONT)SelectObject(hDC, m_hFntTitle);
	GetTextExtentPoint32(hDC, szTitle, _tcslen(szTitle), &size);
	if (size.cx != m_nStreamTitleLen - SCROLL_TITLE_MARGIN) {
		KillTimer(m_hWnd, ID_TIMER_SCROLLSTREAM);

		m_nStreamTitlePos = 0;
		m_nStreamTitleWait = 0;
		m_nStreamTitleLen = size.cx + SCROLL_TITLE_MARGIN;
		if (m_nStreamTitleLen - SCROLL_TITLE_MARGIN > m_nStreamTitleWidth)
			SetTimer(m_hWnd, ID_TIMER_SCROLLSTREAM, TIMER_SCROLLSTREAM_INTERVAL, NULL);
	}

	while (m_nStreamTitlePos >= m_nStreamTitleLen)
		m_nStreamTitlePos = m_nStreamTitlePos - m_nStreamTitleLen;

	if (!m_pOptions->m_fScrollTitle || m_nStreamTitlePos == 0 ||
		m_nStreamTitleLen - SCROLL_TITLE_MARGIN < m_nStreamTitleWidth) {
		// 僗僋儘乕儖側偟
		RECT rc = {STREAM_TITLE_LEFT, m_nStreamTitleTop, 
			STREAM_TITLE_LEFT + m_nStreamTitleWidth, m_nStreamTitleTop + m_nStreamTitleHeight};

		COLORREF crBk = SetTextColor(hDC, m_pSkin->GetColor(COLOR_TITLE));
		int nOld = SetBkMode(hDC, TRANSPARENT);
		DrawText(hDC, szTitle, -1, &rc, DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);	
		SetTextColor(hDC, crBk);
		SetBkMode(hDC, nOld);
	}
	else {
		// 僗僋儘乕儖偁傝
		RECT rc = {0, 0, m_nStreamTitleLen, m_nStreamTitleHeight};

		HDC hMemDC = CreateCompatibleDC(hDC);
		HBITMAP hBmp = CreateCompatibleBitmap(hDC, m_nStreamTitleLen, m_nStreamTitleHeight);
		SelectObject(hMemDC, hBmp);

		if (m_nStreamTitleLen - m_nStreamTitlePos < m_nStreamTitleWidth) {
			BitBlt(hMemDC, m_nStreamTitlePos, 0, m_nStreamTitleLen - m_nStreamTitlePos,
					m_nStreamTitleHeight, hDC, STREAM_TITLE_LEFT, m_nStreamTitleTop, SRCCOPY);
			BitBlt(hMemDC, 0, 0, 
				m_nStreamTitleWidth - (m_nStreamTitleLen - m_nStreamTitlePos),
				m_nStreamTitleHeight, hDC, STREAM_TITLE_LEFT + (m_nStreamTitleLen - m_nStreamTitlePos), m_nStreamTitleTop, SRCCOPY);
		}
		else {
			BitBlt(hMemDC, m_nStreamTitlePos, 0, m_nStreamTitleWidth,
						m_nStreamTitleHeight, hDC, STREAM_TITLE_LEFT, m_nStreamTitleTop, SRCCOPY);
		}

		COLORREF crBk = SetTextColor(hMemDC, m_pSkin->GetColor(COLOR_TITLE));
		int nOld = SetBkMode(hMemDC, TRANSPARENT);
		HFONT hFnt = (HFONT)SelectObject(hMemDC, m_hFntTitle);
		DrawText(hMemDC, szTitle, -1, &rc, DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);	
		SetTextColor(hMemDC, crBk);
		SetBkMode(hMemDC, nOld);
		SelectObject(hMemDC, hFnt);

		if (m_nStreamTitleLen - m_nStreamTitlePos < m_nStreamTitleWidth) {
			BitBlt(hDC, STREAM_TITLE_LEFT, m_nStreamTitleTop, m_nStreamTitleLen - m_nStreamTitlePos, 
				m_nStreamTitleHeight, hMemDC, m_nStreamTitlePos, 0, SRCCOPY);
			BitBlt(hDC, STREAM_TITLE_LEFT + (m_nStreamTitleLen - m_nStreamTitlePos), m_nStreamTitleTop, 
				m_nStreamTitleWidth - (m_nStreamTitleLen - m_nStreamTitlePos), m_nStreamTitleHeight, hMemDC, 0, 0, SRCCOPY);
		}
		else {
			BitBlt(hDC, STREAM_TITLE_LEFT, m_nStreamTitleTop, m_nStreamTitleWidth, 
				m_nStreamTitleHeight, hMemDC, m_nStreamTitlePos, 0, SRCCOPY);
		}

		DeleteDC(hMemDC);
		DeleteObject(hBmp);
	}
	SelectObject(hDC, hBk);
}

void CMainWnd::DrawVolumeSlider(HDC hDC)
{
	ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_VOLSLIDER), 0, hDC, 
			m_nVolumeSliderLeft, m_nVolumeSliderTop, ILD_TRANSPARENT);

	DWORD dwVolume;
	waveOutGetVolume(NULL, &dwVolume);
	dwVolume = max(LOWORD(dwVolume), HIWORD(dwVolume));
	dwVolume = dwVolume * 100 / 0xFFFF;

	double dLeft = (double)(m_nVolumeSliderWidth - m_nVolumeTrackWidth) / 100 * dwVolume;
	ImageList_Draw(m_pSkin->GetImageList(IMAGELIST_VOLTRACK), 0, hDC, 
			m_nVolumeSliderLeft + (int)dLeft, m_nVolumeSliderTop, ILD_TRANSPARENT);

	waveOutGetVolume(NULL, &m_dwCurrentVolume);
}

void CMainWnd::UpdateDisp()
{
	RECT rc = {DISP_LEFT, DISP_TOP, 
		DISP_LEFT + m_nDispWidth, DISP_TOP + m_nDispHeight};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateTrack()
{
	RECT rc = {TRACK_LEFT, TRACK_TOP, 
		TRACK_LEFT + TRACK_WIDTH, TRACK_TOP + TRACK_HEIGHT};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateTime()
{
	RECT rc;
	BOOL fUpdate = FALSE;
	int nSec = GetDrawTime();
	if (m_nLastDrawTime != nSec) {
		SetRect(&rc, TIME_LEFT, TIME_TOP, 
			TIME_LEFT + TIME_WIDTH, TIME_TOP + TIME_HEIGHT);
		InvalidateRect(m_hWnd, &rc, TRUE);
		fUpdate = TRUE;
	}

	FILEINFO* pInfo = GetInfo(GetCurrentFile());
	if (!pInfo || !IsURL(pInfo->szPath)) {
		if (m_nLastDrawSeek != MAP_GetCurrent(m_hMap)) {
			SetRect(&rc, SEEK_LEFT, m_nSeekTop, 
				SEEK_LEFT + m_nSeekWidth, m_nSeekTop + SEEK_HEIGHT);
			InvalidateRect(m_hWnd, &rc, TRUE);
			fUpdate = TRUE;
		}
	}

	if (fUpdate)
		UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateInfo()
{
	RECT rc = {INFO_LEFT, INFO_TOP, 
		INFO_LEFT + INFO_WIDTH, INFO_TOP + INFO_HEIGHT};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdatePlayOption()
{
	RECT rc = {PLAYOPT_LEFT, PLAYOPT_TOP, 
		PLAYOPT_LEFT + PLAYOPT_WIDTH, PLAYOPT_TOP + PLAYOPT_HEIGHT};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateStatus()
{
	RECT rc = {STATUS_LEFT, m_nStatusTop, 
		STATUS_LEFT + STATUS_WIDTH, m_nStatusTop + m_nStatusHeight};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateTitle()
{
	RECT rc = {TITLE_LEFT, m_nTitleTop, 
		TITLE_LEFT + m_nTitleWidth, m_nTitleTop + m_nTitleHeight};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdatePeek()
{
	RECT rc = {PEEK_LEFT, PEEK_TOP, 
		PEEK_LEFT + PEEK_WIDTH, PEEK_TOP + PEEK_HEIGHT};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateStreamTitle()
{
	FILEINFO* pInfo = GetInfo(GetCurrentFile());
	if (!pInfo || !IsURL(pInfo->szPath))
		return;

	RECT rc = {STREAM_TITLE_LEFT, m_nStreamTitleTop, 
		STREAM_TITLE_LEFT + m_nStreamTitleWidth, m_nStreamTitleTop + m_nStreamTitleHeight};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

void CMainWnd::UpdateVolumeSlider()
{
	RECT rc = {m_nVolumeSliderLeft, m_nVolumeSliderTop, 
		m_nVolumeSliderLeft + m_nVolumeSliderWidth, m_nVolumeSliderTop + m_nVolumeSliderHeight};

	InvalidateRect(m_hWnd, &rc, TRUE);
	UpdateWindow(m_hWnd);
}

// 曐懚娭學
void CMainWnd::Save()
{
	RECT rc;
	GetWindowRect(m_hWnd, &rc);
	m_pOptions->m_ptInitWnd.x = rc.left;
	m_pOptions->m_ptInitWnd.y = rc.top;
	m_pOptions->Save(m_hMap);
}

void CMainWnd::Load()
{
	m_pOptions->Load(m_hMap);
}

void CMainWnd::GetDefPlayListPath(LPTSTR pszFile)
{
	GetModuleFileName(GetInst(), pszFile, MAX_PATH);
	LPTSTR p = _tcsrchr(pszFile, _T('.'));
	if (p) {
		*(p + 1) = NULL;
		_tcscat(pszFile, M3U_FILE_EXT);
	}
}

BOOL CMainWnd::IsExisting(LPTSTR pszFile)
{
	if (m_pOptions->m_fAddExisting)
		return FALSE;

	TCHAR szFile1[MAX_PATH];
	_tcscpy(szFile1, pszFile);
	_tcslwr(szFile1);
	for (int i = 0; i < m_pListFile->GetCount(); i++) {
		TCHAR szFile2[MAX_PATH];
		FILEINFO* p = (FILEINFO*)m_pListFile->GetAt(i);
		if (p) {
			_tcscpy(szFile2, p->szPath);
			_tcslwr(szFile2);
			if (_tcscmp(szFile1, szFile2) == 0)
				return TRUE;
		}
	}
	return FALSE;
}

void CMainWnd::RegisterTrayIcon(BOOL fRegist)
{
	NOTIFYICONDATA nid;
	memset(&nid, 0, sizeof(NOTIFYICONDATA));
	nid.cbSize = sizeof(NOTIFYICONDATA);
	nid.hWnd = m_hWnd;
	nid.uID = 1;

	if (fRegist) {
		if (!m_hTrayIcon) {
			m_hTrayIcon = (HICON)LoadImage(GetInst(), (LPCTSTR)IDI_MAIN, IMAGE_ICON, 16, 16, 0);
			nid.hIcon = m_hTrayIcon;
			nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
			nid.uCallbackMessage = WM_TRAYNOTIFY;
			_tcscpy(nid.szTip, MAINWND_TITLE);
			Shell_NotifyIcon(NIM_ADD, &nid);
		}
	}
	else {
		if (m_hTrayIcon) {
			Shell_NotifyIcon(NIM_DELETE, &nid);
			DestroyIcon(m_hTrayIcon);
			m_hTrayIcon = NULL;
		}
	}
}

⌨️ 快捷键说明

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