📄 main.cpp
字号:
tmpOptions.disable_screen_saver = tmpOptions.disable_screen_saver ? 0 : 1;
break;
case IDC_CHECK_SAVE_POS:
tmpOptions.save_pos = tmpOptions.save_pos ? 0 : 1;
break;
}
case WM_DESTROY:
return TRUE;
}
return FALSE;
}
/*
* 参数表链
*
*/
static struct prefsTabs {
LPTSTR rsrc;
char *name;
DLGPROC dProc;
} tabs[]={
{ MAKEINTRESOURCE(IDD_PREFS_GENERAL), "General", PreferencesGeneralDlgProc},
};
/**************************************************************************************
* *
* DlgProc用于主参数选择 *
* -------------------------------- *
**************************************************************************************/
static BOOL APIENTRY PreferencesDlgProc( HWND hDlg, UINT message, UINT wParam, LONG lParam) {
DWORD i;
switch(message) {
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return (TRUE);
}
break;
case WM_INITDIALOG:
{
HWND tab = GetDlgItem(hDlg, IDC_TAB);
memcpy(&tmpOptions, &options, sizeof(options_t));
for(i = 0; i < (sizeof tabs/sizeof tabs[0]); i++) {
TC_ITEM ti;
ti.mask = TCIF_TEXT;
ti.pszText = tabs[i].name;
TabCtrl_InsertItem(tab, i, &ti);
}
hwndDisplay = CreateDialogParam(hInstance, tabs[0].rsrc, hDlg, tabs[0].dProc, (LPARAM)NULL);
ShowWindow(hwndDisplay, SW_SHOW);
return TRUE;
}
case WM_NOTIFY: {
NMHDR *nm = (LPNMHDR)lParam;
switch(nm->code) {
case TCN_SELCHANGE:
{
int iTab = TabCtrl_GetCurSel(nm->hwndFrom);
if (iTab>=0) {
if (hwndDisplay) DestroyWindow(hwndDisplay);
hwndDisplay = CreateDialogParam(hInstance, tabs[iTab].rsrc, hDlg, tabs[iTab].dProc, NULL);
}
ShowWindow(hwndDisplay, SW_SHOW);
}
return TRUE;
}
}
break;
case WM_COMMAND:
switch (wParam)
{
case IDC_PREFS_OK:
EndDialog(hDlg, TRUE);
/*
* 保存参数的变化
*/
memcpy(&options, &tmpOptions, sizeof(options_t));
/*
* 应用
*/
CheckMenuItem(popupMenu, (UINT)ID_LOOP, options.loop ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(popupMenu, (UINT)ID_ON_TOP, options.on_top ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(popupMenu, (UINT)ID_SCREENSAVER, options.disable_screen_saver ? MF_CHECKED : MF_UNCHECKED);
options.on_top = options.on_top ? 0 : 1;
SendMessage(hwnd, WM_COMMAND, (WPARAM)ID_ON_TOP, 0);
playback->SetLoop(options.loop);
/*
* 结束对话框
*/
return TRUE;
break;
case IDC_PREFS_CANCEL:
EndDialog(hDlg, TRUE);
break;
default:
return 0;
}
break;
case WM_DESTROY:
return TRUE;
}
return FALSE;
}
/**************************************************************************************
* *
* DlgProc用于重放 *
* ----------------------------------- *
**************************************************************************************/
static BOOL APIENTRY PlaybackPropertiesDlgProc( HWND hDlg, UINT message, UINT wParam, LONG lParam) {
switch(message) {
case WM_INITDIALOG:
if(playback->HasVideo()) {
if(playback->input)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->input->GetName());
if(playback->decaps)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->decaps->GetName());
if(playback->videoDecoder)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->videoDecoder->GetName());
if(playback->videoBuffer)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->videoBuffer->GetName());
if(playback->videoRenderer)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->videoRenderer->GetName());
}
if(playback->HasAudio()) {
if(playback->audioDecoder)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->audioDecoder->GetName());
if(playback->audioRenderer)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->audioRenderer->GetName());
}
if(playback->hasSubtitles) {
if(playback->subtitler)
SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_ADDSTRING, 0, (LONG) playback->subtitler->GetName());
}
return TRUE;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return (TRUE);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_PLAYBACK_CLOSE :
EndDialog (hDlg, TRUE);
break;
case IDC_PLAYBACK_CONFIGURE:
{
int nItem;
nItem = SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_GETCURSEL, 0, 0);
switch(nItem) {
case 0:
playback->input->Configure(hInstance, hDlg);
break;
case 1:
playback->decaps->Configure(hInstance, hDlg);
break;
case 2:
playback->videoDecoder->Configure(hInstance, hDlg);
break;
case 3:
playback->videoBuffer->Configure(hInstance, hDlg);
break;
case 4:
playback->videoRenderer->Configure(hInstance, hDlg);
break;
case 5:
playback->audioDecoder->Configure(hInstance, hDlg);
break;
case 6:
playback->audioRenderer->Configure(hInstance, hDlg);
break;
case 7:
playback->subtitler->Configure(hInstance, hDlg);
break;
}
}
break;
case IDC_PLAYBACK_LIST:
switch (HIWORD(wParam)) {
case LBN_SELCHANGE:
int nItem;
nItem = SendMessage(GetDlgItem(hDlg, IDC_PLAYBACK_LIST), LB_GETCURSEL, 0, 0);
switch(nItem) {
case 0:
if(playback->input->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 1:
if(playback->decaps->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 2:
if(playback->videoDecoder->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 3:
if(playback->videoBuffer->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 4:
if(playback->videoRenderer->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 5:
if(playback->audioDecoder->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 6:
if(playback->audioRenderer->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
case 7:
if(playback->subtitler->GetCaps() & MEDIA_CAPS_CAN_CONFIGURE) {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), TRUE);
}
else {
EnableWindow(GetDlgItem(hDlg, IDC_PLAYBACK_CONFIGURE), FALSE);
}
break;
}
break;
}
break;
}
break;
case WM_DESTROY:
return TRUE;
}
return FALSE;
}
/**************************************************************************************
* *
* DlgProc用于文件信息对话框 *
* ------------------------------------ *
**************************************************************************************/
int APIENTRY PropDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{
switch (wMsg)
{
case WM_INITDIALOG:
char freq[20];
char channels[2];
char video_size[50];
char duration[20];
char total_size[50];
DWORD time, hours, minutes, seconds;
if(playback->HasAudio() && playback->audioDecoder) {
_ultoa(playback->audioDecoder->GetAudioFormat()->nSamplesPerSec, freq, 10);
_ultoa(playback->audioDecoder->GetAudioFormat()->nChannels, channels, 10);
}
sprintf(video_size, "%dx%d", playback->GetVideoWidth(), playback->GetVideoHeight());
if(playback->input)
sprintf(total_size, "%d bytes", playback->input->GetSize());
time = playback->GetTotalTime();
hours = time/3600;
minutes = (time - hours*3600)/60;
seconds = (time - hours*3600 - minutes*60)/60;
sprintf(duration, "%.2d:%.2d:%.2d", hours, minutes, seconds);
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_FILENAME), playback->GetFilename());
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_FILE_TYPE), playback->input->GetName());
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_FILE_SIZE), total_size);
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_DURATION), duration);
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_DECAPS), playback->decaps->GetName());
if(playback->HasVideo()) {
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_CODEC), playback->videoDecoder->GetName());
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_SIZE), video_size);
switch(playback->videoRenderer->GetVideoMode()) {
case VIDEO_MODE_RGB16:
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_MODE), "RGB 16 bpp");
break;
case VIDEO_MODE_RGB24:
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_MODE), "RGB 24 bpp");
break;
case VIDEO_MODE_RGB32:
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_MODE), "RGB 32 bpp");
break;
case VIDEO_MODE_YUY2:
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_MODE), "YUY2 Overlay");
break;
case VIDEO_MODE_YUV12:
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_MODE), "YUV 12 Overlay");
break;
case VIDEO_MODE_UYVY:
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VIDEO_MODE), "UYVY Overlay");
break;
}
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_VRENDERER), playback->videoRenderer->GetName());
}
if(playback->hasAudio) {
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_AUDIO_CODEC), playback->audioDecoder->GetName());
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_AUDIO_FREQUENCY), freq);
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_AUDIO_CHANNELS), channels);
}
else {
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_AUDIO_CODEC), "Not Available");
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_AUDIO_FREQUENCY), "Not Available");
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_AUDIO_CHANNELS), "Not Available");
}
if(playback->hasSubtitles) {
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_SUB), playback->subtitler->GetName());
}
else {
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_SUB), "Not Available");
}
return (0);
break;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return (TRUE);
}
break;
case WM_COMMAND:
switch (wParam)
{
case IDB_PROPERTIES_OK:
EndDialog(hDlg, TRUE);
return TRUE;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -