📄 ppcmainwnd.cpp
字号:
// 僶僢僥儕忬懺僠僃僢僋
if (((CPpcOptions*)m_pOptions)->m_fDispEnableBattery) {
SYSTEM_POWER_STATUS_EX spse;
GetSystemPowerStatusEx(&spse, FALSE);
if (spse.ACLineStatus == 1) {
m_dwLastOperation = GetTickCount();
return;
}
}
// 婛偵僆僼偺応崌
if (!GetDisplayStatus()) {
m_dwLastOperation = GetTickCount();
return;
}
// 嵞惗拞偺僠僃僢僋
if (MAP_GetStatus(m_hMap) != MAP_STATUS_PLAY) {
m_dwLastOperation = GetTickCount();
return;
}
// 僇僂儞僩Up & 僆僼
if (((int)(GetTickCount() - m_dwLastOperation) / 1000) >= ((CPpcOptions*)m_pOptions)->m_nDispAutoOff) {
TurnOffDisplay();
m_fDisplay = FALSE;
m_dwLastOperation = GetTickCount();
}
}
else if (uID == ID_TIMER_DISPSTATE) {
// 僗僥乕僞僗峏怴偺偨傔偵屇傫偱偍偔
BOOL fRet = GetDisplayStatus();
if (fRet && m_fDisplay != fRet) {
InvalidateRect(m_hWnd, NULL, TRUE);
UpdateWindow(m_hWnd);
}
m_fDisplay = fRet;
}
else if (uID == ID_TIMER_HOLD) {
KillTimer(m_hWnd, ID_TIMER_HOLD);
m_fDrawHold = FALSE;
UpdateTitle();
}
}
void CPpcMainWnd::OnSize(UINT nType, int cx, int cy)
{
DeleteImages();
InitImages();
RECT rc;
MoveWindow(m_hwndLV, PPC_PLAYLIST_LEFT, PPC_PLAYLIST_TOP, PPC_PLAYLIST_WIDTH, PPC_PLAYLIST_HEIGHT, TRUE);
GetWindowRect(m_hwndLV, &rc);
SendMessage(m_hwndLV, LVM_SETCOLUMNWIDTH, 0,
MAKELPARAM(RECT_WIDTH(&rc) - GetSystemMetrics(SM_CXVSCROLL) - GetSystemMetrics(SM_CXBORDER) * 2, 0));
InvalidateRect(m_hWnd, NULL, TRUE);
UpdateWindow(m_hWnd);
}
void CPpcMainWnd::OnLButtonDown(int x, int y)
{
CMainWnd::OnLButtonDown(x, y);
}
void CPpcMainWnd::OnMouseMove(int fKey, int x, int y)
{
if (m_fListDrag) {
RECT rcItem;
if (!ListView_GetItemRect(m_hwndLV, 0, &rcItem, LVIR_BOUNDS))
return;
POINT pt = {x, y};
ClientToScreen(m_hWnd, &pt);
ScreenToClient(m_hwndLV, &pt);
RECT rcLV;
GetClientRect(m_hwndLV, &rcLV);
if (pt.y < RECT_HEIGHT(&rcItem)) {
ListView_Scroll(m_hwndLV, 0, -RECT_HEIGHT(&rcItem));
OnFileUp();
m_nListDragItem = max(m_nListDragItem - 1, 0);
}
else if (pt.y > rcLV.bottom - RECT_HEIGHT(&rcItem)) {
ListView_Scroll(m_hwndLV, 0, RECT_HEIGHT(&rcItem));
OnFileDown();
m_nListDragItem = min(m_nListDragItem + 1, ListView_GetItemCount(m_hwndLV) - 1);
}
else {
LVHITTESTINFO lvhti;
lvhti.pt.x = pt.x;
lvhti.pt.y = pt.y;
int nItem = ListView_HitTest(m_hwndLV, &lvhti);
if (nItem == -1)
return;
if (nItem - m_nListDragItem > 0) {
for (int i = 0; i < nItem - m_nListDragItem; i++)
OnFileDown();
m_nListDragItem = nItem;
}
else if (nItem - m_nListDragItem < 0) {
for (int i = 0; i < m_nListDragItem - nItem; i++)
OnFileUp();
m_nListDragItem = nItem;
}
}
}
else
CMainWnd::OnMouseMove(fKey, x, y);
}
void CPpcMainWnd::OnLButtonUp(int x, int y)
{
if (m_fListDrag) {
ReleaseCapture();
m_fListDrag = FALSE;
}
else
CMainWnd::OnLButtonUp(x, y);
}
void CPpcMainWnd::OnInitMenuPopup(HMENU hMenu, UINT uPos, BOOL fSystemMenu)
{
if (uPos == IDM_PLAY) {
switch (((CPpcOptions*)m_pOptions)->m_fRepeat) {
case COptions::RepeatAll:
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_NONE, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_ALL, MF_BYCOMMAND | MF_CHECKED);
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_ONE, MF_BYCOMMAND | MF_UNCHECKED);
break;
case COptions::RepeatOne:
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_NONE, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_ALL, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_ONE, MF_BYCOMMAND | MF_CHECKED);
break;
default:
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_NONE, MF_BYCOMMAND | MF_CHECKED);
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_ALL, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_PLAY_REPEAT_ONE, MF_BYCOMMAND | MF_UNCHECKED);
break;
}
CheckMenuItem(hMenu, IDM_PLAY_SHUFFLE,
((CPpcOptions*)m_pOptions)->m_fShuffle ? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED);
}
}
void CPpcMainWnd::OnFileList()
{
SetForegroundWindow(m_hWnd);
CMainWnd::OnFileList();
}
void CPpcMainWnd::OnFileSort(UINT uID)
{
int nSort = SORTFILE_BYNAME;
switch (uID) {
case IDM_FILE_SORT_BYNAME:
nSort = SORTFILE_BYNAME; break;
case IDM_FILE_SORT_BYPATH:
nSort = SORTFILE_BYPATH; break;
}
SortFile(nSort);
}
void CPpcMainWnd::OnToolEffect()
{
SetForegroundWindow(m_hWnd);
CMainWnd::OnToolEffect();
}
void CPpcMainWnd::OnToolOption()
{
if (m_fHold)
return;
SetForegroundWindow(m_hWnd);
UnregisterHotKeys();
CMainWnd::OnToolOption();
RegisterHotKeys();
}
void CPpcMainWnd::OnShowMenu(POINT* ppt)
{
//SetForegroundWindow(m_hWnd);
//CMainWnd::OnShowMenu(ppt);
}
void CPpcMainWnd::OnToolHold()
{
UnregisterHotKeys();
m_fHold = !m_fHold;
EnableWindow(m_hWnd, !m_fHold);
RegisterHotKeys();
if (!m_fActive)
SetForegroundWindow(m_hWnd);
KillTimer(m_hWnd, ID_TIMER_HOLD);
m_fDrawHold = TRUE;
SetTimer(m_hWnd, ID_TIMER_HOLD, TIMER_HOLD_INTERVAL, NULL);
UpdateTitle();
}
void CPpcMainWnd::OnToolHoldDisp()
{
UnregisterHotKeys();
m_fHold = !m_fHold;
EnableWindow(m_hWnd, !m_fHold);
RegisterHotKeys();
if (!m_fActive)
SetForegroundWindow(m_hWnd);
KillTimer(m_hWnd, ID_TIMER_HOLD);
m_fDrawHold = TRUE;
SetTimer(m_hWnd, ID_TIMER_HOLD, TIMER_HOLD_INTERVAL, NULL);
UpdateTitle();
if (m_fHold) {
TurnOffDisplay();
m_fDisplay = FALSE;
}
else {
TurnOnDisplay();
m_fDisplay = TRUE;
InvalidateRect(m_hWnd, NULL, TRUE);
UpdateWindow(m_hWnd);
}
}
void CPpcMainWnd::RegisterHotKeys()
{
if (m_fHotKey)
return;
int i, j;
if (m_fHold) {
for (i = 0; i < sizeof(s_uHoldKeys) / sizeof(UINT) / 2; i++)
RegisterHotKey(m_hWnd, s_uHoldKeys[i][0], s_uHoldKeys[i][1], s_uHoldKeys[i][0]);
CPpcOptions* pOptions = (CPpcOptions*)m_pOptions;
for (i = 0; i < pOptions->m_listKeyMap.GetCount(); i++) {
BOOL fHold = FALSE;
ACCEL* p = (ACCEL*)pOptions->m_listKeyMap.GetAt(i);
for (j = 0; j < sizeof(s_uHoldKeys) / sizeof(UINT) / 2; j++) {
if (s_uHoldKeys[j][0] == p->key) {
fHold = TRUE;
break;
}
}
if (!fHold) {
UINT fsModifiers = 0;
if (p->fVirt & FALT)
fsModifiers |= MOD_ALT;
if (p->fVirt & FCONTROL)
fsModifiers |= MOD_CONTROL;
if (p->fVirt & FSHIFT)
fsModifiers |= MOD_SHIFT;
if (p->fVirt & FWIN)
fsModifiers |= MOD_WIN;
RegisterHotKey(m_hWnd, p->key, fsModifiers, p->key);
}
}
}
else {
CPpcOptions* pOptions = (CPpcOptions*)m_pOptions;
for (i = 0; i < pOptions->m_listKeyMap.GetCount(); i++) {
ACCEL* p = (ACCEL*)pOptions->m_listKeyMap.GetAt(i);
UINT fsModifiers = 0;
if (p->fVirt & FALT)
fsModifiers |= MOD_ALT;
if (p->fVirt & FCONTROL)
fsModifiers |= MOD_CONTROL;
if (p->fVirt & FSHIFT)
fsModifiers |= MOD_SHIFT;
if (p->fVirt & FWIN)
fsModifiers |= MOD_WIN;
RegisterHotKey(m_hWnd, p->key, fsModifiers, p->key);
}
}
m_fHotKey = TRUE;
}
void CPpcMainWnd::UnregisterHotKeys()
{
if (!m_fHotKey)
return;
int i, j;
if (m_fHold) {
for (i = 0; i < sizeof(s_uHoldKeys) / sizeof(UINT) / 2; i++)
UnregisterHotKey(m_hWnd, s_uHoldKeys[i][0]);
CPpcOptions* pOptions = (CPpcOptions*)m_pOptions;
for (i = 0; i < pOptions->m_listKeyMap.GetCount(); i++) {
BOOL fHold = FALSE;
ACCEL* p = (ACCEL*)pOptions->m_listKeyMap.GetAt(i);
for (j = 0; j < sizeof(s_uHoldKeys) / sizeof(UINT) / 2; j++) {
if (s_uHoldKeys[j][0] == p->key) {
fHold = TRUE;
break;
}
}
if (!fHold) UnregisterHotKey(m_hWnd, p->key);
}
}
else {
CPpcOptions* pOptions = (CPpcOptions*)m_pOptions;
for (i = 0; i < pOptions->m_listKeyMap.GetCount(); i++) {
ACCEL* p = (ACCEL*)pOptions->m_listKeyMap.GetAt(i);
UnregisterHotKey(m_hWnd, p->key);
}
}
m_fHotKey = FALSE;
}
void CPpcMainWnd::CreateMenuBar()
{
SHMENUBARINFO mbi = {0};
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = m_hWnd;
mbi.nToolBarId = IDR_MAIN;
mbi.hInstRes = GetInst();
mbi.nBmpId = IDR_MAIN;
mbi.cBmpImages = 5;
//mbi.dwFlags = SHCMBF_HIDESIPBUTTON;
if (!SHCreateMenuBar(&mbi))
return;
m_hwndCB = mbi.hwndMB;
TBBUTTON tbbMain[] = {
{1, IDM_FILE_ADD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
{2, IDM_FILE_UP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 1},
{3, IDM_FILE_DOWN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 2},
{4, IDM_FILE_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 3},
//{5, IDM_FILE_SAVE_LIST, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 4}
};
CommandBar_AddButtons(m_hwndCB, sizeof(tbbMain) / sizeof(TBBUTTON), tbbMain);
#ifdef LANG_JPN
TBBUTTONINFO tbi = {sizeof(TBBUTTONINFO), TBIF_TEXT | TBIF_IMAGE, 0, 0, TBSTYLE_BUTTON, 0, 0, 0, 0, 0};
SendMessage(m_hwndCB, TB_SETBUTTONINFO, IDM_TOOL, (LPARAM)&tbi);
#endif
}
void CPpcMainWnd::CreateListView()
{
DWORD dwStyle = WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_NOCOLUMNHEADER;
m_hwndLV = CreateWindow(WC_LISTVIEW, NULL, dwStyle,
PPC_PLAYLIST_LEFT, PPC_PLAYLIST_TOP, PPC_PLAYLIST_WIDTH, PPC_PLAYLIST_HEIGHT, m_hWnd, 0, GetInst(), NULL);
ListView_SetExtendedListViewStyle(m_hwndLV,
ListView_GetExtendedListViewStyle(m_hwndLV) | LVS_EX_FULLROWSELECT);
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = 0;
lvc.pszText = _T("Name");
lvc.iSubItem = 0;
ListView_InsertColumn(m_hwndLV, 0, &lvc);
RECT rc;
GetWindowRect(m_hwndLV, &rc);
SendMessage(m_hwndLV, LVM_SETCOLUMNWIDTH, 0,
MAKELPARAM(RECT_WIDTH(&rc) - GetSystemMetrics(SM_CXVSCROLL) - GetSystemMetrics(SM_CXBORDER) * 2 - 1, 0));
}
// 儕僗僩
BOOL CPpcMainWnd::AddFile(LPTSTR pszFile, LPTSTR pszTitle)
{
if (!m_hMap) return FALSE;
// 懚嵼僠僃僢僋
if (IsExisting(pszFile))
return FALSE;
// 桳岠惈僠僃僢僋
if (!IsValidStream(pszFile))
return FALSE;
// 儕僗僩偵捛壛
FILEINFO* pInfo = new FILEINFO;
if (pszTitle)
_tcscpy(pInfo->szDisplayName, pszTitle);
else
MAP_GetId3TagFile(m_hMap, pszFile, &pInfo->tag);
_tcscpy(pInfo->szPath, pszFile);
m_pListFile->Add((DWORD)pInfo);
// 儕僗僩價儏乕偵捛壛
TCHAR szTitle[MAX_PATH];
GetTitle(m_pListFile->GetCount() - 1, szTitle);
LVITEM lvi = {0};
lvi.mask = LVIF_TEXT;
lvi.iItem = ListView_GetItemCount(m_hwndLV);
lvi.pszText = szTitle;
ListView_InsertItem(m_hwndLV, &lvi);
// 奐偄偰偄側偄応崌偼奐偔
OpenFirstFile();
return TRUE;
}
void CPpcMainWnd::AddDir(LPTSTR pszDir)
{
CMainWnd::AddDir(pszDir);
}
BOOL CPpcMainWnd::InsertFile(LPTSTR pszFile, int nIndex)
{
if (!m_hMap) return FALSE;
// 桳岠惈僠僃僢僋
if (!IsValidStream(pszFile))
return FALSE;
// 儕僗僩偵憓擖
FILEINFO* pInfo = new FILEINFO;
MAP_GetId3TagFile(m_hMap, pszFile, &pInfo->tag);
_tcscpy(pInfo->szPath, pszFile);
m_pListFile->Insert((DWORD)pInfo, nIndex);
// 儕僗僩價儏乕偵捛壛
TCHAR szTitle[MAX_PATH];
GetTitle(m_pListFile->GetCount() - 1, szTitle);
LVITEM lvi = {0};
lvi.mask = LVIF_TEXT;
lvi.iItem = nIndex;
lvi.pszText = szTitle;
ListView_InsertItem(m_hwndLV, &lvi);
// 奐偄偰偄側偄応崌偼奐偔
OpenFirstFile();
return TRUE;
}
void ExchangeItem(HWND hwndLV, int nItem1, int nItem2)
{
UINT uItem1, uItem2;
TCHAR szTitle1[MAX_PATH];
TCHAR szTitle2[MAX_PATH];
ListView_GetItemText(hwndLV, nItem1, 0, szTitle1, MAX_PATH);
ListView_GetItemText(hwndLV, nItem2, 0, szTitle2, MAX_PATH);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -