?? winmain.cpp
字號:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "win32volume.h"
#include "resource.h"
#include "cdplayer.h"
#define VK_B 0x42
#define VK_E 0x45
#define VK_N 0x4E
#define VK_P 0x50
#define VK_S 0x53
#define IDC_PLAY ID_FILE_PLAY
#define IDC_STOP ID_FILE_STOP
#define IDC_NEXT ID_FILE_NEXT
#define IDC_PREVIOUS ID_FILE_PREVIOUS
#define IDC_PAUSE ID_FILE_PAUSE
#define IDC_CLOSE ID_FILE_EXIT
#define IDC_MINIMIZE ID_FILE_MINIMIZE
#define IDC_SKIPF 1001
#define IDC_SKIPB 1002
#define IDC_MENU 1003
#define IDC_TRACKS 1004
#define IDC_DEVICES 1005
#define IDC_LOAD 1006
#define IDM_TRACKS 31000
#define IDM_DEVICES 32000
#define WM_TRAYICON WM_USER + 101
#define ClassName "Hello"
extern bool cdValid;
bool Open = false;
bool moveWindow = false;
bool Playing = false;
bool Paused = false;
bool abDevices[26];
bool killTimer = false;
bool IDM_Tracks = false;
bool Minimized = false;
bool Hidden = false;
extern int maxTrack;
extern int trackLength;
extern int pzMin;
extern int pzSec;
int nNumberOfDevices = 0;
int cdVolume = 0;
int nCurrentDevice[10];
int CurrentDevice = 0;
int Pos = 0;
int Track = 1;
int tSec = 0;
int tMin = 0;
int oldX = 0;
int oldY = 0;
int newX = 0;
int newY = 0;
Win32Volume CDVolume;
NOTIFYICONDATA nid;
HINSTANCE g_hInst = NULL;
HICON TrayIcon;
HICON iPlay;
HICON iStop;
HICON iPause;
HMENU hMenu;
HMENU hPopup;
HWND g_hWnd = NULL;
HWND bPlay = NULL;
HWND bStop = NULL;
HWND bPause = NULL;
HWND bPrevious = NULL;
HWND bNext = NULL;
HWND bSkipB = NULL;
HWND bSkipF = NULL;
HWND bLoad = NULL;
HWND sProgress = NULL;
HWND TrackInfo = NULL;
HWND TimeInfo = NULL;
HWND lTracks = NULL;
HWND lDevices = NULL;
HWND Tracks = NULL;
HWND Devices = NULL;
TCHAR TrackLength[30];
void CleanUp()
{
delete(TrayIcon);
delete(iPlay);
delete(iStop);
delete(iPause);
delete(hMenu);
delete(hPopup);
delete(g_hWnd);
delete(bPlay);
delete(bStop);
delete(bPause);
delete(bPrevious);
delete(bNext);
delete(bSkipB);
delete(bSkipF);
delete(bLoad);
delete(sProgress);
delete(TrackInfo);
delete(TimeInfo);
delete(lTracks);
delete(lDevices);
delete(Tracks);
delete(Devices);
return;
}
void InitTracksMenu()
{
HMENU hSubMenu;
char szTmp[300];
hSubMenu = GetSubMenu(GetSubMenu(hPopup, 10), maxTrack);
for (int nLoop = 0 ; nLoop < maxTrack; nLoop ++)
{
int nFlags;
sprintf(szTmp, "%d. Track %d", nLoop + 1, nLoop + 1);
nFlags = MF_BYCOMMAND | MF_STRING;
if (nLoop+1 == Track)
nFlags |= MF_CHECKED;
ModifyMenu(hSubMenu, IDM_TRACKS + nLoop, nFlags, IDM_TRACKS + nLoop, szTmp);
}
}
void CreateTrayIcon(HWND hWnd, HINSTANCE hInst)
{
nid.cbSize = sizeof(nid);
TrayIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_TRAY), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
iPlay = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_PLAY), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
iStop = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_STOP), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
iPause = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_PAUSE), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
nid.hIcon = TrayIcon;
nid.hWnd = hWnd;
strcpy(nid.szTip,"CD Player");
nid.uCallbackMessage = WM_TRAYICON;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uID = (UINT)hInst;
Shell_NotifyIcon(NIM_ADD, &nid);
}
void ShowTrayIcon(void)
{
Shell_NotifyIcon(NIM_ADD, &nid);
}
void HideTrayIcon(void)
{
Shell_NotifyIcon(NIM_DELETE, &nid);
}
void SetTrayIconIcon(HICON icon)
{
nid.hIcon = icon;
Shell_NotifyIcon(NIM_MODIFY, &nid);
}
void SetTrayIconCaption(char *msg)
{
strcpy(nid.szTip, msg);
Shell_NotifyIcon(NIM_MODIFY, &nid);
}
void KillTrayIcon(void)
{
Shell_NotifyIcon(NIM_DELETE, &nid);
DestroyIcon(TrayIcon);
memset(&nid, 0, sizeof(nid));
}
void SetupMenu()
{
HMENU hSubMenu = GetSubMenu(hPopup, 2);
RemoveMenu(hSubMenu, 0, MF_BYPOSITION);
for(int Loop = IDM_DEVICES; Loop < nNumberOfDevices; Loop++)
{
RemoveMenu(hSubMenu, 0, MF_BYPOSITION);
}
char szTmp[300];
for (int nLoop2 = 0 ; nLoop2 < nNumberOfDevices; nLoop2 ++)
{
int nFlags = MF_BYPOSITION | MF_STRING;
sprintf(szTmp, "CD Drive %c:", nCurrentDevice[nLoop2] + 'A');
if (nLoop2 == CurrentDevice)
nFlags |= MF_CHECKED;
InsertMenu(hSubMenu, 0xFFFFFFFF, nFlags, (IDM_DEVICES+nLoop2), szTmp);
}
hSubMenu = GetSubMenu(hPopup, 0);
RemoveMenu(hSubMenu, 0, MF_BYPOSITION);
for(int Loop1 = 0; Loop1 < 100; Loop1++)
{
RemoveMenu(hSubMenu, 0, MF_BYPOSITION);
}
for (int nLoop = 0 ; nLoop < maxTrack; nLoop ++)
{
int nFlags = MF_BYCOMMAND | MF_STRING;
sprintf(szTmp, "%d. Track %d", nLoop + 1, nLoop + 1);
if (nLoop+1 == Track)
nFlags |= MF_CHECKED;
InsertMenu(hSubMenu, 0xFFFFFFFF, nFlags, (IDM_TRACKS+nLoop), szTmp);
}
}
void SetupCD()
{
for (unsigned int nLoop = 'A' ; nLoop <= 'Z' ; nLoop ++)
{
char zRoot[4];
sprintf(zRoot, "%c:\\", nLoop);
if (GetDriveType(zRoot) == DRIVE_CDROM)
{
abDevices[nLoop - 'A'] = TRUE;
nCurrentDevice[nNumberOfDevices] = nLoop - 'A';
nNumberOfDevices ++;
}
else
abDevices[nLoop - 'A'] = FALSE;
}
CurrentDevice = 0;
if (CDAudio_Init(nCurrentDevice[CurrentDevice]) == -1)
{
PostQuitMessage(0);
}
char* error;
if (CDAudio_CheckValidity(error) != 0)
{
cdValid = false;
EnableWindow(bPlay, false);
EnableWindow(bStop, false);
EnableWindow(bNext, false);
EnableWindow(bPrevious, false);
EnableWindow(bPause, false);
EnableWindow(bSkipF, false);
EnableWindow(bSkipB, false);
}
else
{
cdValid = true;
}
}
LRESULT WINAPI MsgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
switch(lParam)
{
case WM_RBUTTONDOWN:
MessageBox(hWnd, "Right Button Down", "Error", NULL);
break;
case WM_LBUTTONDOWN:
MessageBox(hWnd, "Left Button Down", "Error", NULL);
break;
}
case MM_MCINOTIFY:
switch (wParam)
{
case MCI_NOTIFY_SUCCESSFUL:
if (Playing)
{
TCHAR Message[30];
Track++;
if(Track == maxTrack + 1)
{
Track = 1;
}
SendMessage(hWnd, WM_COMMAND, IDC_PLAY, NULL);
wsprintf(Message, "Track: %d", Track);
SendMessage(TrackInfo, WM_SETTEXT, 0, (LPARAM)Message);
}
break;
case MCI_NOTIFY_ABORTED:
case MCI_NOTIFY_SUPERSEDED:
break;
case MCI_NOTIFY_FAILURE:
CDAudio_Stop ();
CDAudio_SetCDValidity(false);
break;
}
break;
case WM_TRAYICON:
switch(lParam)
{
case WM_RBUTTONDOWN:
POINT pp;
GetCursorPos(&pp);
if (pp.x < (long) (GetSystemMetrics(SM_CXSCREEN) - 100))
pp.x = (long) (GetSystemMetrics(SM_CXSCREEN) - 100);
if (pp.y < (long) (GetSystemMetrics(SM_CYSCREEN) - 100))
pp.y = (long) (GetSystemMetrics(SM_CYSCREEN) - 100);
SetForegroundWindow(hWnd);
TrackPopupMenu(hPopup, TPM_RIGHTBUTTON, pp.x, pp.y, 0, hWnd, NULL);
break;
case WM_LBUTTONDOWN:
SetForegroundWindow(hWnd);
if(Minimized)
{
ShowWindow(hWnd, SW_SHOW);
}
}
break;
case WM_CREATE:
{
hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_TRAY_POPUP));
hPopup = GetSubMenu(hMenu, 0);
HWND bMenu = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 205, 10, 15, 15, hWnd, (HMENU)IDC_MENU, g_hInst, NULL);
bPlay = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 113, 200, 50, 20, hWnd, (HMENU)IDC_PLAY, g_hInst, NULL);
bStop = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 193, 200, 20, 20, hWnd, (HMENU)IDC_STOP, g_hInst, NULL);
bPause = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 168, 200, 20, 20, hWnd, (HMENU)IDC_PAUSE, g_hInst, NULL);
bPrevious = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 168, 225, 20, 20, hWnd, (HMENU)IDC_PREVIOUS, g_hInst, NULL);
bNext = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 193, 225, 20, 20, hWnd, (HMENU)IDC_NEXT, g_hInst, NULL);
bSkipB = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 113, 225, 20, 20, hWnd, (HMENU)IDC_SKIPB, g_hInst, NULL);
bSkipF = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 141, 225, 20, 20, hWnd, (HMENU)IDC_SKIPF, g_hInst, NULL);
bLoad = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 138, 178, 50, 20, hWnd, (HMENU)IDC_LOAD, g_hInst, NULL);
HWND bClose = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 258, 45, 15, 15, hWnd, (HMENU)IDC_CLOSE, g_hInst, NULL);
HWND bMinimize = CreateWindow("BUTTON", "", BS_FLAT | WS_VISIBLE | WS_CHILD | BS_BITMAP, 235, 25, 15, 15, hWnd, (HMENU)IDC_MINIMIZE, g_hInst, NULL);
sProgress = CreateWindow("SCROLLBAR", NULL, WS_VISIBLE | WS_CHILD | SBS_HORZ, 42, 145, 232, 10, hWnd, (HMENU)NULL, g_hInst, NULL);
TCHAR Message[20];
wsprintf(Message, "Track: %d", Track);
TrackInfo = CreateWindow("STATIC", Message, WS_VISIBLE | WS_CHILD, 50, 65, 145, 16, hWnd, (HMENU)NULL, g_hInst, NULL);
TimeInfo = CreateWindow("STATIC", "Time: 0:00/0:00", WS_VISIBLE | WS_CHILD, 50, 81, 145, 16, hWnd, (HMENU)NULL, g_hInst, NULL);
SendMessage(bPlay, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_PLAY)));
SendMessage(bStop, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_STOP)));
SendMessage(bNext, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_NEXT)));
SendMessage(bPrevious, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_PREVIOUS)));
SendMessage(bPause, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_PAUSE)));
SendMessage(bSkipF, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_SKIPF)));
SendMessage(bSkipB, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_SKIPB)));
SendMessage(bLoad, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_LOAD)));
SendMessage(bClose, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_CLOSE)));
SendMessage(bMinimize, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_MINIMIZE)));
SendMessage(bMenu, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_MENU)));
SendMessage(sProgress, SBM_SETRANGE, 0, 0);
SendMessage(sProgress, SBM_SETRANGEREDRAW, 0, 0);
SendMessage(sProgress, SBM_SETPOS, 0, true);
EnableScrollBar(sProgress, SB_BOTH, ESB_DISABLE_BOTH);
Pos = 0;
EnableScrollBar(sProgress, SB_HORZ, ESB_ENABLE_BOTH);
EnableWindow(sProgress, false);
break;
}
case WM_HSCROLL:
switch(LOWORD(wParam))
{
case SB_PAGEUP:
{
if(Playing)
{
Pos -= 8;
tMin = Pos / 60;
tSec = Pos % 60;
SendMessage(sProgress, SBM_SETPOS, Pos, true);
CDAudio_Play(Track, tMin, tSec, true, hWnd);
}
break;
}
case SB_PAGEDOWN:
{
if(Playing)
{
Pos += 8;
tMin = Pos / 60;
tSec = Pos % 60;
SendMessage(sProgress, SBM_SETPOS, Pos, true);
CDAudio_Play(Track, tMin, tSec, true, hWnd);
}
break;
}
case SB_THUMBTRACK:
{
if(Playing)
{
Pos = HIWORD(wParam);
SendMessage(sProgress, SBM_SETPOS, Pos, true);
tMin = Pos / 60;
tSec = Pos % 60;
CDAudio_Play(Track, tMin, tSec, true, hWnd);
}
break;
}
}
break;
case WM_TIMER:
{
KillTimer (hWnd, 1);
if(killTimer == true)
{
killTimer = false;
tMin = 0;
tSec = -1;
Pos = 0;
Track = 1;
SendMessage(TimeInfo, WM_SETTEXT, 0, (LPARAM)"Time: 0:00/0:00");
SendMessage(TrackInfo, WM_SETTEXT, 0, (LPARAM)"Track: 1");
SendMessage(sProgress, SBM_SETPOS, 0, true);
EnableWindow(sProgress, false);
break;
}
TCHAR Message[30];
Pos++;
SendMessage(sProgress, SBM_SETPOS, Pos, true);
tSec++;
if(tSec == 60)
{
tMin++;
tSec = 0;
}
if(tSec < 10)
{
if(pzSec < 10)
{
wsprintf(Message, "Time: %d:0%d/%d:0%d", tMin, tSec, pzMin, pzSec);
}
else
{
wsprintf(Message, "Time: %d:0%d/%d:%d", tMin, tSec, pzMin, pzSec);
}
}
else
{
if(pzSec < 10)
{
wsprintf(Message, "Time: %d:%d/%d:0%d", tMin, tSec, pzMin, pzSec);
}
else
{
wsprintf(Message, "Time: %d:%d/%d:%d", tMin, tSec, pzMin, pzSec);
}
}
SendMessage(TimeInfo, WM_SETTEXT, 0, (LPARAM)Message);
SetTimer (hWnd, 1, 1000, NULL);
break;
}
case WM_COMMAND:
if (LOWORD(wParam) >= IDM_TRACKS && LOWORD(wParam) < (IDM_TRACKS + maxTrack))
{
TCHAR Message[30];
HMENU hSubMenu = GetSubMenu(hPopup, 2);
CheckMenuItem(hPopup, IDM_TRACKS+(Track-1), MF_BYCOMMAND | MF_UNCHECKED);
Track = (LOWORD(wParam) - IDM_TRACKS) + 1;
wsprintf(Message, "Track: %d", Track);
SendMessage(TrackInfo, WM_SETTEXT, 0, (LPARAM)Message);
SendMessage(hWnd, WM_COMMAND, IDC_PLAY, NULL);
CheckMenuItem(hPopup, IDM_TRACKS+(Track-1), MF_BYCOMMAND | MF_CHECKED);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -