📄 main.cpp
字号:
default:
return 0;
}
break;
}
return FALSE;
}
/**************************************************************************************
* *
* DlgProc用于关于对话框 *
* ----------------------------------- *
**************************************************************************************/
int APIENTRY AboutDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{
switch (wMsg)
{
case WM_INITDIALOG:
return (0);
break;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return (TRUE);
}
break;
case WM_COMMAND:
switch (wParam)
{
case IDB_ABOUT_OK:
EndDialog(hDlg, TRUE);
return TRUE;
break;
default:
return 0;
}
break;
}
return FALSE;
}
/**************************************************************************************
* *
* DlgProc用于外壳浏览对话框 *
* ----------------------------------- *
**************************************************************************************/
int APIENTRY SkinBrowserDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{
switch (wMsg)
{
case WM_INITDIALOG:
int i;
/*
* 初始化外壳链表
*/
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) "[Default Skin]");
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, 0, 0);
if(skinList->skinsDir != NULL) {
SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_ADDSTRING, 0, (LONG)skinList->skinsDir);
SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_SETCURSEL, 0, 0);
}
skinList->Scan();
for(i=0; i < skinList->getNumberOfSkins(); i++) {
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) skinList->getSkinInfo(i)->name);
if(strcmp(skinList->getSkinInfo(i)->directory, skinPath) == 0) {
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, i+1, 0);
}
}
return (0);
break;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return (TRUE);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_SKIN_LIST:
switch (HIWORD(wParam)) {
case LBN_SELCHANGE:
int nItem;
nItem = SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_GETCURSEL, 0, 0);
if(nItem == 0) {
RECT rect;
skin->LoadDefault(hInstance, hwnd);
strcpy(skinPath, "Default");
UpdateMainWindow();
}
else {
RECT rect;
skin->Load(skinList->getSkinInfo(nItem - 1)->directory, hwnd);
strcpy(skinPath, skinList->getSkinInfo(nItem - 1)->directory);
UpdateMainWindow();
}
break;
}
}
switch (wParam)
{
case IDB_SKINS_OK:
EndDialog(hDlg, TRUE);
return TRUE;
break;
case ID_SKINS_CANCEL:
EndDialog(hDlg, TRUE);
return TRUE;
break;
case IDC_CHANGE_DIR:
dirChooser = new CDirDialog();
if(dirChooser->DoBrowse()) {
skinList->SetDir(dirChooser->m_strPath);
SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_RESETCONTENT, 0, 0);
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_RESETCONTENT, 0, 0);
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) "[Default Skin]");
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, 0, 0);
if(skinList->skinsDir != NULL) {
SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_ADDSTRING, 0, (LONG)skinList->skinsDir);
SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_SETCURSEL, 0, 0);
}
skinList->Scan();
for(i=0; i < skinList->getNumberOfSkins(); i++) {
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) skinList->getSkinInfo(i)->name);
if(strcmp(skinList->getSkinInfo(i)->directory, skinPath) == 0) {
SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, 0, 0);
}
}
}
break;
default:
return 0;
}
break;
}
return FALSE;
}
/**************************************************************************************
* *
* DlgProc用于打开URL对话框 *
* ----------------------------------- *
**************************************************************************************/
int APIENTRY UrlDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{
switch (wMsg)
{
case WM_INITDIALOG:
SendMessage(GetDlgItem(hDlg, IDC_RADIO_HTTP), BM_SETCHECK, BST_CHECKED, 0);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_CHECK_ANONYMOUS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_SERVER), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_FTP), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD), FALSE);
return (0);
break;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE) {
EndDialog (hDlg, TRUE);
return (TRUE);
}
break;
case WM_COMMAND:
switch (wParam)
{
case IDC_RADIO_HTTP:
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_CHECK_ANONYMOUS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_SERVER), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_FTP), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EXAMPLE), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_HTTP), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_HTTP), TRUE);
break;
case IDC_RADIO_FTP:
EnableWindow(GetDlgItem(hDlg, IDC_CHECK_ANONYMOUS), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_SERVER), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_FTP), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_HTTP), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_HTTP), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EXAMPLE), FALSE);
anonymous = 1;
CheckDlgButton(hDlg, IDC_CHECK_ANONYMOUS, TRUE);
break;
case IDC_CHECK_ANONYMOUS:
anonymous = anonymous ? 0 : 1;
if(anonymous) {
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD), FALSE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD), TRUE);
}
break;
case IDB_URL_OK:
EndDialog(hDlg, TRUE);
RECT rect;
GetClientRect(hwnd, &rect);
InvalidateRect(hwnd, &rect, TRUE);
UpdateWindow(hwnd);
openOK = FALSE;
if(SendMessage(GetDlgItem(hDlg, IDC_RADIO_HTTP), BM_GETCHECK, 0, 0) == BST_CHECKED) {
SHORT lineLength;
lineLength = (short) SendMessage(GetDlgItem(hDlg, IDC_EDIT_HTTP), EM_LINELENGTH, 0, 0);
/*
* 将url缓冲写入头两个字节
*
*/
url = (char *) new char[lineLength + 1];
memcpy(url, &lineLength, 2);
SendMessage(GetDlgItem(hDlg, IDC_EDIT_HTTP), EM_GETLINE, 0, (LONG)(LPVOID)url);
url[lineLength] = '\0';
if(strstr(url, "http://") != NULL || strstr(url, "HTTP://") != NULL) {
openOK = TRUE;
return 0;
}
}
else {
SHORT lineLength;
lineLength = (short) SendMessage(GetDlgItem(hDlg, IDC_RADIO_HTTP), EM_LINELENGTH, 0, 0);
/*
* 将url缓冲写入头两个字节
*
*/
url = (char *) new char[lineLength + 1];
memcpy(url, &lineLength, 2);
SendMessage(GetDlgItem(hDlg, IDC_EDIT_HTTP), EM_GETLINE, 0, (LONG)(LPVOID)url);
url[lineLength] = '\0';
if(strstr(url, "ftp://") != NULL || strstr(url, "FTP://") != NULL) {
if(anonymous) {
openOK = TRUE;
return 0;
}
else {
}
}
}
return TRUE;
break;
case IDB_URL_CANCEL:
EndDialog(hDlg, TRUE);
return TRUE;
break;
default:
return 0;
}
break;
}
return FALSE;
}
/**************************************************************************************
* *
* 清除 *
* ------- *
**************************************************************************************/
void Cleanup()
{
DWORD i;
for(i=0; i < 5; i++) {
if(RecentFiles[i] != NULL) {
free(RecentFiles[i]);
}
}
DestroyMenu(popupMenu);
CoUninitialize();
delete playback;
delete skinList;
delete resizer;
}
/**************************************************************************************
* *
* - ParseCmdLine(): *
* *
* ———分析命令行和重载选项 *
* *
**************************************************************************************/
void ParseCmdLine(char *lpszCmdParam)
{
char *token;
char *arg1;
token = lpszCmdParam;
while(*token != '\0' && (*token == ' ' || *token == '\t'))
token++;
while(*token != '\0') {
if(*token == '/') {
token++;
if(*token == 'f') {
options.startFullscreen = 1;
token++;
}
continue;
}
if(*token == '"') {
arg1 = ++token;
while(*token != '\0' && *token != '"') {
token++;
}
*token++ = '\0';
playlist->AddItem(arg1);
}
token++;
}
}
/**************************************************************************************
* *
* - ReBuildRecentFilesMenu(): *
* *
* ———分析命令行和重载选项 *
* *
**************************************************************************************/
void ReBuildRecentFilesMenu()
{
HMENU menu;
MENUITEMINFO itemInfo;
DWORD i,count;
char buffer[MAX_PATH + 4];
menu = GetSubMenu(popupMenu, 0);
menu = GetSubMenu(menu, 5);
if(RecentFiles[0] != NULL) {
count = GetMenuItemCount(menu);
for(i=0; i<count; i++)
RemoveMenu(menu, 0, MF_BYPOSITION);
/*
* 加入文件
*/
for(i=0; i < 5; i++) {
if(RecentFiles[i] != NULL) {
sprintf(buffer, "%d - ", i+1);
strcat(buffer, RecentFiles[i]);
itemInfo.cbSize = sizeof(MENUITEMINFO);
itemInfo.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -