📄 freeampui.cpp
字号:
/*____________________________________________________________________________
FreeAmp - The Free MP3 Player
Portions Copyright (C) 1998 GoodNoise
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
$Id: freeampui.cpp,v 1.73 2000/07/31 19:51:40 ijr Exp $
____________________________________________________________________________*/
/* system headers */
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <shlobj.h>
#include <assert.h>
#include <commctrl.h>
#include <commdlg.h>
#include <shellapi.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <mmsystem.h >
#include <sys/stat.h>
/* project headers */
#include "config.h"
#include "thread.h"
#include "freeampui.h"
#include "event.h"
#include "eventdata.h"
#include "playlist.h"
#include "utility.h"
#include "renderer.h"
#include "fontwidth.h"
#include "preferences.h"
#include "prefdialog.h"
#include "stringitem.h"
#include "resource.h"
#define TIMER_MOUSE_POSITION 0
#define TIMER_SEEK_POSITION 1
#define TIMER_VOLUME_POSITION 2
#define TIMER_SHOW_STATUS_INFO 3
#define UWM_TRAY WM_USER + 666
const char* kAudioFileFilter =
"MPEG Audio Streams (.mpg, .mp1, .mp2, .mp3, .mpp)\0"
"*.mpg;*.mp1;*.mp2;*.mp3;*.mpp\0"
"Playlists (.m3u)\0"
"*.m3u\0"
"All Files (*.*)\0"
"*.*\0";
const char* kOpenAudioFileTitle = "Open Audio File";
const char* kPlaylistFileFilter =
"Playlists (.m3u)\0"
"*.m3u\0"
"All Files (*.*)\0"
"*.*\0";
const char* kOpenPlaylistFileTitle = "Open Playlist File";
const char* kSavePlaylistFileTitle = "Save Playlist File";
HINSTANCE g_hinst = NULL;
extern "C" FreeAmpUI *Initialize(FAContext *context)
{
return new FreeAmpUI(context);
}
INT
WINAPI
DllMain ( HINSTANCE hInstance,
ULONG ul_reason_being_called,
LPVOID lpReserved)
{
switch (ul_reason_being_called)
{
case DLL_PROCESS_ATTACH:
g_hinst = hInstance;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return 1;
}
static
LRESULT
WINAPI
MainWndProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam )
{
LRESULT result = 0;
FreeAmpUI* ui = (FreeAmpUI*)GetWindowLong(hwnd, GWL_USERDATA);
switch (msg)
{
case WM_CREATE:
{
// When we create the window we pass in a pointer to our
// UserInterface object...
// Tuck away the pointer in a safe place
ui = (FreeAmpUI*)((LPCREATESTRUCT)lParam)->lpCreateParams;
assert(ui != NULL);
result = SetWindowLong(hwnd, GWL_USERDATA, (LONG)ui);
// remember what window we are associated with
ui->SetWindowHandle(hwnd);
// Now we can start using the object's methods
ui->Create();
break;
}
case WM_DESTROY:
ui->Destroy();
break;
case WM_PAINT:
result = ui->Paint();
break;
case WM_PALETTECHANGED:
if(hwnd == (HWND)wParam)
break;
case WM_QUERYNEWPALETTE:
{
if(ui->Palette())
{
HDC hdc = GetDC(hwnd);
int32 numEntries;
SelectPalette(hdc, ui->Palette(), FALSE);
numEntries = RealizePalette(hdc);
ReleaseDC(hwnd, hdc);
if(numEntries)
InvalidateRect(hwnd, NULL, TRUE);
result = TRUE;
}
break;
}
case WM_COPYDATA:
{
COPYDATASTRUCT* pcds = (COPYDATASTRUCT*)lParam;
ui->FilesReceived((char*)pcds->lpData, pcds->dwData);
break;
}
case WM_INITMENUPOPUP:
ui->InitMenuPopup( (HMENU) wParam,
(uint32)LOWORD(lParam),
(HIWORD(lParam) != 0));
break;
case WM_GETMINMAXINFO:
ui->MinMaxInfo((MINMAXINFO*)lParam);
break;
case WM_SETCURSOR:
SetCursor(ui->Cursor());
result = 1;
break;
case WM_COMMAND:
ui->Command(wParam, (View*)lParam);
break;
case WM_NOTIFY:
ui->Notify(wParam, (LPNMHDR)lParam);
break;
case WM_DROPFILES:
ui->DropFiles((HDROP) wParam);
break;
case WM_TIMER:
ui->Timer(wParam);
break;
case WM_KILLFOCUS:
case WM_CANCELMODE:
ui->CancelMode();
break;
case WM_NCHITTEST:
{
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ScreenToClient(hwnd, &pt);
result = ui->HitTest(pt.x, pt.y);
break;
}
case WM_MOUSEMOVE:
{
if(!ui->MouseCaptured())
{
SetTimer(hwnd, TIMER_MOUSE_POSITION, 500, NULL);
ui->SetMouseCapture(true);
}
ui->MouseMove(LOWORD(lParam), HIWORD(lParam), wParam);
break;
}
case WM_NCMOUSEMOVE:
{
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ScreenToClient(hwnd, &pt);
ui->MouseMove(pt.x, pt.y, 0);
KillTimer(hwnd, TIMER_MOUSE_POSITION);
ui->SetMouseCapture(false);
break;
}
case WM_LBUTTONDOWN:
{
ui->LeftButtonDown(LOWORD(lParam), HIWORD(lParam), wParam);
break;
}
case WM_LBUTTONUP:
{
ui->LeftButtonUp(LOWORD(lParam), HIWORD(lParam), wParam);
break;
}
case WM_LBUTTONDBLCLK:
{
ui->LeftButtonDoubleClick(LOWORD(lParam), HIWORD(lParam), wParam);
break;
}
case WM_RBUTTONDOWN:
{
ui->RightButtonDown(LOWORD(lParam), HIWORD(lParam), wParam);
break;
}
case WM_NCRBUTTONDOWN:
{
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ScreenToClient(hwnd, &pt);
ui->RightButtonDown(pt.x, pt.y, wParam);
break;
}
case WM_RBUTTONUP:
{
ui->RightButtonUp(LOWORD(lParam), HIWORD(lParam), wParam);
break;
}
case WM_NCRBUTTONUP:
{
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ScreenToClient(hwnd, &pt);
ui->RightButtonUp(pt.x, pt.y, wParam);
break;
}
case WM_KEYDOWN:
{
ui->KeyDown(wParam);
break;
}
case WM_EXITSIZEMOVE:
{
ui->ExitSizeMove();
break;
}
case UWM_TRAY:
{
ui->TrayNotify(lParam);
break;
}
default:
result = DefWindowProc( hwnd, msg, wParam, lParam );
break;
}
return result;
}
FreeAmpUI::
FreeAmpUI(FAContext *context):
UserInterface()
{
m_context = context;
m_hwnd = NULL;
m_palette = NULL;
m_windowRegion = NULL;
m_playerRegion = NULL;
m_viewList = NULL;
m_trayIcon = NULL;
*m_trayTooltip = 0x00;
m_mouseCaptured = false;
m_log = false;
m_onTop = false;
m_liveInTray = false;
m_playerCanvas = NULL;
m_bodyBitmap = NULL;
m_playBitmap = NULL;
m_stopBitmap = NULL;
m_pauseBitmap = NULL;
m_nextBitmap = NULL;
m_lastBitmap = NULL;
m_modeBitmap = NULL;
m_minimizeBitmap = NULL;
m_closeBitmap = NULL;
m_repeatBitmap = NULL;
m_shuffleBitmap = NULL;
m_openBitmap = NULL;
m_volumeDialBitmap = NULL;
m_seekDialBitmap = NULL;
m_shuffleIconBitmap = NULL;
m_repeatIconBitmap = NULL;
m_repeatAllIconBitmap = NULL;
m_smallFontBitmap = NULL;
m_largeFontBitmap = NULL;
m_timeBackgroundBitmap = NULL;
m_drawerBitmap = NULL;
m_drawerMaskBitmap = NULL;
m_panelBackingBitmap = NULL;
m_panelBackingMaskBitmap = NULL;
m_scrollbarBitmap = NULL;
m_addBitmap = NULL;
m_deleteBitmap = NULL;
m_saveBitmap = NULL;
m_loadBitmap = NULL;
m_captureView = NULL;
m_mouseView = NULL;
m_backgroundView = NULL;
//m_resizeView = NULL;
m_playView = NULL;
m_stopView = NULL;
m_pauseView = NULL;
m_nextView = NULL;
m_lastView = NULL;
m_modeView = NULL;
m_minimizeView = NULL;
m_closeView = NULL;
m_repeatView = NULL;
m_shuffleView = NULL;
m_openView = NULL;
m_volumeView = NULL;
m_seekView = NULL;
m_shuffleIconView = NULL;
m_repeatIconView = NULL;
m_repeatAllIconView = NULL;
m_songTitleView = NULL;
m_timeView = NULL;
m_volumeInfoView = NULL;
m_drawerView = NULL;
m_panelBackingView = NULL;
m_playlistView = NULL;
m_scrollbarView = NULL;
m_addView = NULL;
m_deleteView = NULL;
m_saveView = NULL;
m_loadView = NULL;
m_width = 0;
m_height = 0;
m_secondsPerFrame = 0;
m_totalFrames = 0;
m_currentFrame = 0;
m_seekFrame = 0;
m_prevSongInfoText = NULL;
m_state = UIState_Stopped;
for(int32 i = 0; i < kNumControls; i++)
{
m_controlRegions[i] = NULL;
}
m_cursor = LoadCursor(NULL, IDC_ARROW);
m_uiSemaphore = new Semaphore();
m_prefs = m_context->prefs;
m_uiThread = Thread::CreateThread();
m_uiThread->Create(ui_thread_function, this);
m_uiSemaphore->Wait();
delete m_uiSemaphore;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -