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

📄 winmain.cpp

📁 CD播放器源代码 .rar
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			if(LOWORD(wParam) >= IDM_DEVICES && LOWORD(wParam) < (IDM_DEVICES + nNumberOfDevices))
			{
				CheckMenuItem(hPopup, IDM_DEVICES + CurrentDevice, MF_BYCOMMAND | MF_UNCHECKED);
				CheckMenuItem(hPopup, LOWORD(wParam), MF_BYCOMMAND | MF_CHECKED);

				if(Playing)
				{
					if(MessageBox(hWnd, "Are you sure you wish to stop current playing and change device?", "CD Message", MB_YESNO | MB_ICONQUESTION) == IDYES)
					{
						CDAudio_Stop();
					}
					else
					{
						break;
					}
				}
				CDAudio_Shutdown();
				CurrentDevice = (LOWORD(wParam) - IDM_DEVICES);

				CDAudio_Init(nCurrentDevice[CurrentDevice]);

				char* error;

				if (CDAudio_CheckValidity(error) != 0)
				{
					char szTmp[300];

					HMENU hSubMenu = GetSubMenu(hPopup, 0);

					RemoveMenu(hSubMenu, 0, MF_BYPOSITION);
					for(int Loop1 = 0; Loop1 < 100; Loop1++)
					{
						RemoveMenu(hSubMenu, 0, MF_BYPOSITION);
					}

					int nFlags = MF_BYCOMMAND | MF_STRING;

					sprintf(szTmp, "No Tracks Available", 1, 1);

					InsertMenu(hSubMenu, 0xFFFFFFFF, nFlags, (IDM_TRACKS), szTmp);

					EnableMenuItem(hSubMenu, (IDM_TRACKS), MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

					cdValid = false;
					EnableWindow(bPlay,		false);
					EnableWindow(bStop,		false);
					EnableWindow(bNext,		false);
					EnableWindow(bPrevious, false);
					EnableWindow(bPause,	false);
					EnableWindow(bSkipF,	false);
					EnableWindow(bSkipB,	false);
				}
				else
				{
					InitTracksMenu();

					cdValid = true;
					EnableWindow(bPlay,		true);
					EnableWindow(bStop,		true);
					EnableWindow(bNext,		true);
					EnableWindow(bPrevious, true);
					EnableWindow(bPause,	true);
					EnableWindow(bSkipF,	true);
					EnableWindow(bSkipB,	true);
				}
				killTimer = true;
			}

			switch(wParam)
			{
				case ID_FILE_SHOWTI:
				{
					if(!Minimized)
					{
						if(Hidden)
						{
							Hidden = !Hidden;
							ShowTrayIcon();
							ModifyMenu(hPopup, ID_FILE_SHOWTI, MF_BYCOMMAND | MF_STRING, ID_FILE_SHOWTI, "Hide Tray Icon");
						}
						else
						{
							Hidden = !Hidden;
							HideTrayIcon();
							ModifyMenu(hPopup, ID_FILE_SHOWTI, MF_BYCOMMAND | MF_STRING, ID_FILE_SHOWTI, "Show Tray Icon");
						}
					}
					break;
				}
				case IDC_MENU:
				{
					POINT mPoint;
					GetCursorPos(&mPoint);
					SetForegroundWindow(hWnd);
					TrackPopupMenu(hPopup, TPM_RIGHTBUTTON, mPoint.x, mPoint.y, 0, hWnd, NULL);
					break;
				}
				case IDC_LOAD:
				{
					if(!Open)
					{
						CDAudio_Eject();
						Open = !Open;
						EnableWindow(bPlay,		false);
						EnableWindow(bStop,		false);
						EnableWindow(bNext,		false);
						EnableWindow(bPrevious, false);
						EnableWindow(bPause,	false);
						EnableWindow(bSkipF,	false);
						EnableWindow(bSkipB,	false);
					}
					else
					{
						CDAudio_CloseDoor();
						Open = !Open;

						char* error;

						int cdError = CDAudio_CheckValidity(error);

						if(cdError == 2)
						{
							// Unexpected Error Occured
							MessageBox(hWnd, error, "Error", NULL);
						}
						else if(cdError = 1)
						{
							// Not a valid CD
						}
						else
						{
							// All systems go, Audio CD inserted.
							EnableWindow(bPlay,		true);
							EnableWindow(bStop,		true);
							EnableWindow(bNext,		true);
							EnableWindow(bPrevious, true);
							EnableWindow(bPause,	true);
							EnableWindow(bSkipF,	true);
							EnableWindow(bSkipB,	true);
						}
					}
					break;
				}
				case ID_FILE_EXIT:
					if(Playing)
					{
						if(MessageBox(hWnd, "Are you sure you want to exit?", "Exit CD Player?", MB_YESNO | MB_ICONQUESTION)==IDYES)
							PostQuitMessage(0);
					}
					else
					{
						PostQuitMessage(0);
					}
					break;
				case IDC_PLAY:
					Playing = true;

					EnableMenuItem(hPopup, ID_FILE_PLAY, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
					EnableMenuItem(hPopup, ID_FILE_STOP, MF_BYCOMMAND | MF_ENABLED);
					EnableMenuItem(hPopup, ID_FILE_PAUSE, MF_BYCOMMAND | MF_ENABLED);

					EnableWindow(sProgress,		true);

					if(!Paused)
					{
						TCHAR Message[30];

						tMin = 0;
						tSec = -1;
						Pos = 0;

						trackLength = CDGetTrackLength(Track, TrackLength);

						SendMessage(sProgress, SBM_SETRANGE,		0, trackLength);
						SendMessage(sProgress, SBM_SETRANGEREDRAW,	0, trackLength);

						SendMessage(sProgress, SBM_SETPOS, 0, true);

						if(CDAudio_Play(Track, 0, 0, true, hWnd) != 0)
						{
							EnableWindow(bPlay,		false);
							EnableWindow(bStop,		false);
							EnableWindow(bNext,		false);
							EnableWindow(bPrevious, false);
							EnableWindow(bPause,	false);
							EnableWindow(bSkipF,	false);
							EnableWindow(bSkipB,	false);

							break;
						}
					}
					else
					{
						Paused = false;
						if(CDAudio_Play(Track, tMin, tSec, true, hWnd) == 1)
						{
							break;
						}
					}

					SetTrayIconIcon(iPlay);
					SetTrayIconCaption("CD Player - Playing");

					if(maxTrack != CDAudio_GetNumTracks())
					{
						maxTrack = CDAudio_GetNumTracks();
						SetupMenu();
					}

					SetTimer(hWnd, 1, 1000, NULL);
					killTimer = false;

					break;
				case IDC_STOP:
					EnableMenuItem(hPopup, ID_FILE_STOP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
					EnableMenuItem(hPopup, ID_FILE_PAUSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
					EnableMenuItem(hPopup, ID_FILE_PLAY, MF_BYCOMMAND | MF_ENABLED);

					TCHAR Message[30];
					if(trackLength%60 < 10)
					{
						wsprintf(Message, "Time:  0:00/%d:0%d", pzMin, pzSec);
					}
					else
					{
						wsprintf(Message, "Time:  0:00/%d:%d", pzMin, pzSec);
					}

					SendMessage(TimeInfo, WM_SETTEXT, 0, (LPARAM)Message);

					SendMessage(sProgress, SBM_SETPOS,			0, true);

					killTimer = true;
					if(Paused)
					{
						Paused = false;
					}
					if(Playing)
					{
						SetTrayIconIcon(iStop);
						SetTrayIconCaption("CD Player - Stopped");
						CDAudio_Stop();
						Playing = false;
					}

					break;
				case IDC_NEXT:
				{
					TCHAR Message[20];
					SetTrayIconCaption("CD Player - Searching");
					Track++;
					if(Track > maxTrack)
					{
						Track = 1;
					}
					if(Playing)
					{
						killTimer = true;

						SendMessage(hWnd, WM_COMMAND, IDC_PLAY, NULL);

						SetTrayIconCaption("CD Player - Playing");
					}
					wsprintf(Message, "Track:  %d", Track);
					SendMessage(TrackInfo, WM_SETTEXT, 0, (LPARAM)Message);
					break;
				}
				case IDC_PREVIOUS:
				{
					TCHAR Message[20];
					SetTrayIconCaption("CD Player - Searching");
					Track--;
					if(Track < 1)
					{
						Track = maxTrack;
					}
					if(Playing)
					{
						killTimer = true;

						SendMessage(hWnd, WM_COMMAND, IDC_PLAY, NULL);
					}
					SetTrayIconCaption("CD Player - Playing");
					wsprintf(Message, "Track:  %d", Track);
					SendMessage(TrackInfo, WM_SETTEXT, 0, (LPARAM)Message);
					break;
				}
				case IDC_PAUSE:
					EnableMenuItem(hPopup, ID_FILE_PAUSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
					EnableMenuItem(hPopup, ID_FILE_PLAY, MF_BYCOMMAND | MF_ENABLED);
					EnableMenuItem(hPopup, ID_FILE_STOP, MF_BYCOMMAND | MF_ENABLED);
					if(Playing)
					{
						killTimer = true;
						Paused = true;
						SetTrayIconIcon(iPause);
						SetTrayIconCaption("CD Player - Paused");
						CDAudio_Pause();
					}
					break;
				case IDC_MINIMIZE:
					if(Hidden)
					{
						ShowTrayIcon();
					}
					if(!Minimized)
					{
						EnableMenuItem(hPopup, ID_FILE_SHOWTI, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

						Minimized = !Minimized;
						ShowWindow(hWnd, SW_HIDE);
						ModifyMenu(hPopup, ID_FILE_MINIMIZE, MF_BYCOMMAND | MF_STRING, ID_FILE_MINIMIZE, "Restore");
					}
					else
					{
						EnableMenuItem(hPopup, ID_FILE_SHOWTI, MF_BYCOMMAND | MF_ENABLED);

						Minimized = !Minimized;
						ShowWindow(hWnd, SW_SHOW);
						ModifyMenu(hPopup, ID_FILE_MINIMIZE, MF_BYCOMMAND | MF_STRING, ID_FILE_MINIMIZE, "Minimize");
					}
					break;
				case IDC_SKIPF:
					Pos += 10;
					tSec += 10;
					if(tSec >= 60)
					{
						tMin++;
						tSec = tSec - 60;
					}
					SetTrayIconCaption("CD Player - Seeking Forward");

					CDAudio_Play(Track, tMin, tSec, true, hWnd);
					break;
				case IDC_SKIPB:
					Pos -= 10;
					tSec -= 10;
					if(tSec < 0 && tMin > 0)
					{
						tSec = 59;
						tMin--;
					}
					else if(tSec < 0 && tMin <= 0)
					{
						tSec = 0;
						tMin = 0;
					}

					SetTrayIconCaption("CD Player - Seeking Backward");

					CDAudio_Play(Track, tMin, tSec, true, hWnd);

					tSec = -1;
					break;
			}
			break;
		case WM_KEYUP:
			switch(LOWORD(wParam))
			{
				case VK_B:
					SendMessage(hWnd, WM_COMMAND, IDC_PREVIOUS, NULL);
					break;
				case VK_E:
					SendMessage(hWnd, WM_COMMAND, IDC_LOAD, NULL);
					break;
				case VK_N:
					SendMessage(hWnd, WM_COMMAND, IDC_NEXT, NULL);
					break;
				case VK_P:
					SendMessage(hWnd, WM_COMMAND, IDC_PLAY, NULL);
					break;
				case VK_S:
					SendMessage(hWnd, WM_COMMAND, IDC_STOP, NULL);
					break;
			}
			break;
		case WM_KEYDOWN:
			switch(LOWORD(wParam))
			{
				case VK_LEFT:
					if(Playing)
					{
						Pos -= 10;
						if(Pos < 0)
						{
							Pos = 0;
						}
						tMin = Pos / 60;
						tSec = Pos % 60;
						SendMessage(sProgress, SBM_SETPOS, Pos, true);
						CDAudio_Play(Track, tMin, tSec, true, hWnd);
					}
					break;
				case VK_RIGHT:
					if(Playing)
					{
						Pos += 10;
						if(Pos < 0)
						{
							Pos = 0;
						}
						tMin = Pos / 60;
						tSec = Pos % 60;
						SendMessage(sProgress, SBM_SETPOS, Pos, true);
						CDAudio_Play(Track, tMin, tSec, true, hWnd);
					}
					break;
				case VK_ADD:
					cdVolume += 5;
					if(cdVolume > 100)
					{
						cdVolume = 100;
					}
					CDVolume.SetVolume(cdVolume, cdVolume);
					break;
				case VK_SUBTRACT:
					cdVolume -= 5;
					if(cdVolume < 0)
					{
						cdVolume = 0;
					}
					CDVolume.SetVolume(cdVolume, cdVolume);
					break;
			}
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
	}

	return DefWindowProc(hWnd, Msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	WNDCLASS			wcl;

	HBITMAP hBackground = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BACKGROUND));

	HBRUSH Background = CreatePatternBrush(hBackground);

	wcl.cbClsExtra			= 0;
	wcl.cbWndExtra			= 0;
	wcl.hbrBackground		= Background;
	wcl.hCursor				= LoadCursor(NULL, IDC_ARROW);
	wcl.hIcon				= LoadIcon(NULL, MAKEINTRESOURCE(IDI_MAIN_ICON));
	wcl.hInstance			= hInstance;
	wcl.lpfnWndProc			= MsgProc;
	wcl.lpszClassName		= ClassName;
	wcl.lpszMenuName		= NULL;
	wcl.style				= CS_HREDRAW | CS_VREDRAW;

	if(!RegisterClass(&wcl))
	{
		MessageBox(NULL, "Unable to Register Window Class", "Fatal Error", MB_ICONSTOP);
		return 0;
	}

	g_hInst = hInstance;

	DWORD WindowStyle = WS_OVERLAPPED;

	HWND phWnd = CreateWindow(ClassName, "CD Player", WindowStyle, 0, 0, 320, 280, NULL, NULL, hInstance, NULL);
	HWND hWnd = CreateWindow(ClassName, "CD Player", WindowStyle, 160, 140, /*(GetSystemMetrics(SM_CXSCREEN)/2)-160, (GetSystemMetrics(SM_CYSCREEN)/2)-140, */320, 280, phWnd, NULL, hInstance, NULL);
	if(hWnd == NULL)
	{
		MessageBox(NULL, "Unable to Create Window", "Fatal Error", MB_ICONSTOP);
		return 0;
	}

	g_hWnd = hWnd;

	CreateTrayIcon(hWnd, hInstance);

	SetupCD();

	EnableMenuItem(hPopup, ID_FILE_STOP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
	EnableMenuItem(hPopup, ID_FILE_PAUSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

	SetTrayIconCaption("CD Player - Stopped");

	maxTrack = CDAudio_GetNumTracks();

	SetupMenu();

	HRGN hRegion2 = CreateEllipticRgn	(0, 0, 320, 280);
	SetWindowRgn					(hWnd, hRegion2, 1);

	ShowWindow(hWnd, SW_SHOW);

	CDVolume.InitVolumeControl(hWnd);
	CDVolume.GetVolume(cdVolume, cdVolume);

	MSG Msg;
	while(Msg.message != WM_QUIT)
	{
		if(PeekMessage(&Msg, NULL, NULL, NULL, PM_REMOVE))
		{
			TranslateMessage(&Msg);
			DispatchMessage(&Msg);
		}
	}

	KillTrayIcon();
	if(Playing == true)
	{
		CDAudio_Stop();
	}
	CDAudio_Shutdown();
	UnregisterClass(ClassName, hInstance);

	DestroyWindow(phWnd);
	DestroyWindow(hWnd);
	DestroyWindow(sProgress);
	DestroyWindow(TrackInfo);
	DestroyWindow(TimeInfo);
	DestroyWindow(lTracks);
	DestroyWindow(lDevices);
	DestroyWindow(Tracks);
	DestroyWindow(Devices);

	DestroyMenu(hMenu);
	DestroyMenu(hPopup);

	DestroyIcon(iPlay);
	DestroyIcon(iStop);
	DestroyIcon(iPause);
	DestroyIcon(TrayIcon);

	return 1;
}

⌨️ 快捷键说明

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