📄 gui.cpp
字号:
EnableMenuItem(hMenu, IDM_STOP, MF_ENABLED);
EnableMenuItem(hMenu, 2, MF_BYPOSITION | MF_GRAYED);
DragAcceptFiles(hWnd, false);
if (!n)
Wavefs44File(SoundDelay[0], 1, 1);
else
for (i=0; i<File_Limit && !Stop_Flag; i++)
{
strcpy(szInput, Infilename[i]);
strcpy(szOutput, Outfilename[i]);
Wavefs44File(SoundDelay[i], i+1, File_Limit);
}
File_Limit = 0;
EnableMenuItem(hMenu, IDM_OPEN, MF_ENABLED);
EnableMenuItem(hMenu, IDM_PROCESS_WAV, MF_ENABLED);
EnableMenuItem(hMenu, IDM_LOAD_D2V, MF_ENABLED);
EnableMenuItem(hMenu, IDM_STOP, MF_GRAYED);
EnableMenuItem(hMenu, 2, MF_BYPOSITION | MF_ENABLED);
if (!Stop_Flag)
{
SetDlgItemText(hDlg, IDC_REMAIN, "FINISH");
MessageBeep(MB_OK);
}
DragAcceptFiles(hWnd, true);
return 0;
}
void ThreadKill()
{
if (Check_Flag)
{
if ((AVI_Flag || D2V_Flag) && Track_Flag!=TRACK_NONE &&
((ac3[Track_Flag].rip && AC3_Flag==AUDIO_DECODE) || pcm.rip))
{
if (SRC_Flag)
{
EndSRC(pcm.file);
pcm.size = ((int)(0.91875*pcm.size)>>2)<<2;
}
Normalize(NULL, 44, pcm.filename, pcm.file, 44, pcm.size);
EndWAV(pcm.file, pcm.size);
}
if (process.locate==LOCATE_INIT || process.locate==LOCATE_RIP)
{
if (D2V_Flag)
fprintf(D2VFile, " 9");
_fcloseall();
AVI_Flag = false;
D2V_Flag = false;
Display_Flag = false;
EnableMenuItem(hMenu, IDM_OPEN, MF_ENABLED);
EnableMenuItem(hMenu, IDM_PREVIEW, MF_ENABLED);
EnableMenuItem(hMenu, IDM_SAVE, MF_ENABLED);
EnableMenuItem(hMenu, IDM_LOAD_D2V, MF_ENABLED);
EnableMenuItem(hMenu, IDM_SAVE_D2V, MF_ENABLED);
EnableMenuItem(hMenu, IDM_STOP, MF_GRAYED);
EnableMenuItem(hMenu, IDM_PAUSE, MF_GRAYED);
EnableMenuItem(hMenu, 1, MF_BYPOSITION | MF_ENABLED);
EnableMenuItem(hMenu, 2, MF_BYPOSITION | MF_ENABLED);
EnableMenuItem(GetSubMenu(hMenu, 1), 1, MF_BYPOSITION | MF_ENABLED);
if (LumDlg_Flag)
EnableWindow(hLumDlg, true);
if (NormDlg_Flag)
EnableWindow(hNormDlg, true);
EnableWindow(hTrack, true);
EnableWindow(hLeftButton, true);
EnableWindow(hLeftArrow, true);
EnableWindow(hRightArrow, true);
EnableWindow(hRightButton, true);
SendMessage(hTrack, TBM_SETSEL, (WPARAM) true, (LPARAM) MAKELONG(process.trackleft, process.trackright));
DragAcceptFiles(hWnd, true);
}
if (process.locate==LOCATE_RIP && !Stop_Flag)
{
MessageBeep(MB_OK);
SetDlgItemText(hDlg, IDC_REMAIN, "FINISH");
}
}
ExitThread(0);
}
LRESULT CALLBACK Statistics(HWND hStatisticsDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SendDlgItemMessage(hStatisticsDlg, IDC_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0, 10000));
return true;
case WM_COMMAND:
if (LOWORD(wParam) == IDCANCEL)
{
DestroyWindow(hStatisticsDlg);
Statistics_Flag = false;
return true;
}
}
return false;
}
LRESULT CALLBACK Delay(HWND hDelayDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetDlgItemText(hDelayDlg, IDC_DELAY, "0");
return true;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
SoundDelay[File_Limit] = GetDlgItemInt(hDelayDlg, IDC_DELAY, NULL, true);
if (abs(SoundDelay[File_Limit]) > 10000000)
SoundDelay[File_Limit] = 0;
EndDialog(hDelayDlg, 0);
return true;
}
}
return false;
}
LRESULT CALLBACK About(HWND hAboutDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return true;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hAboutDlg, 0);
return true;
}
}
return false;
}
LRESULT CALLBACK Luminance(HWND hDialog, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
LumDlg_Flag = true;
SendDlgItemMessage(hDialog, IDC_GAIN_SLIDER, TBM_SETRANGE, 0, MAKELPARAM(0, 256));
SendDlgItemMessage(hDialog, IDC_GAIN_SLIDER, TBM_SETTICFREQ, 128, 0);
SendDlgItemMessage(hDialog, IDC_GAIN_SLIDER, TBM_SETPOS, 1, LumGain);
sprintf(szTemp, "%d", LumGain-128);
SetDlgItemText(hDialog, IDC_GAIN, szTemp);
SendDlgItemMessage(hDialog, IDC_OFFSET_SLIDER, TBM_SETRANGE, 0, MAKELPARAM(0, 512));
SendDlgItemMessage(hDialog, IDC_OFFSET_SLIDER, TBM_SETTICFREQ, 256, 0);
SendDlgItemMessage(hDialog, IDC_OFFSET_SLIDER, TBM_SETPOS, 1, LumOffset+256);
sprintf(szTemp, "%d", LumOffset);
SetDlgItemText(hDialog, IDC_OFFSET, szTemp);
ShowWindow(hDialog, SW_SHOW);
if (Luminance_Flag)
SendDlgItemMessage(hDialog, IDC_LUM_CHECK, BM_SETCHECK, BST_CHECKED, 0);
return true;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_LUM_CHECK:
if (SendDlgItemMessage(hDialog, IDC_LUM_CHECK, BM_GETCHECK, 1, 0)==BST_CHECKED)
{
CheckMenuItem(hMenu, IDM_LUMINANCE, MF_CHECKED);
Luminance_Flag = true;
}
else
{
CheckMenuItem(hMenu, IDM_LUMINANCE, MF_UNCHECKED);
Luminance_Flag = false;
}
if (Check_Flag && WaitForSingleObject(hThread, 0)==WAIT_OBJECT_0)
{
Fault_Flag = false; Display_Flag = true;
Write_Frame(backward_reference_frame, d2v_backward, 0);
}
break;
case IDCANCEL:
DestroyWindow(hDialog);
LumDlg_Flag = false;
return true;
}
break;
case WM_HSCROLL:
switch (GetWindowLong((HWND)lParam, GWL_ID))
{
case IDC_GAIN_SLIDER:
LumGain = SendDlgItemMessage(hDialog, IDC_GAIN_SLIDER, TBM_GETPOS, 0, 0);
LumGainMask = ((__int64)LumGain<<48) + ((__int64)LumGain<<32) + ((__int64)LumGain<<16) + (__int64)LumGain;
sprintf(szTemp, "%d", LumGain-128);
SetDlgItemText(hDialog, IDC_GAIN, szTemp);
break;
case IDC_OFFSET_SLIDER:
LumOffset = SendDlgItemMessage(hDialog, IDC_OFFSET_SLIDER, TBM_GETPOS, 0, 0) - 256;
LumOffsetMask = ((__int64)LumOffset<<48) + ((__int64)LumOffset<<32) + ((__int64)LumOffset<<16) + (__int64)LumOffset;
sprintf(szTemp, "%d", LumOffset);
SetDlgItemText(hDialog, IDC_OFFSET, szTemp);
break;
}
if (Check_Flag && WaitForSingleObject(hThread, 0)==WAIT_OBJECT_0)
{
Fault_Flag = false; Display_Flag = true;
Write_Frame(backward_reference_frame, d2v_backward, 0);
}
break;
}
return false;
}
LRESULT CALLBACK Normalization(HWND hDialog, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
NormDlg_Flag = true;
SendDlgItemMessage(hDialog, IDC_NORM_SLIDER, TBM_SETRANGE, 0, MAKELPARAM(0, 100));
SendDlgItemMessage(hDialog, IDC_NORM_SLIDER, TBM_SETTICFREQ, 50, 0);
SendDlgItemMessage(hDialog, IDC_NORM_SLIDER, TBM_SETPOS, 1, Norm_Ratio);
sprintf(szTemp, "%d", Norm_Ratio);
SetDlgItemText(hDialog, IDC_NORM, szTemp);
ShowWindow(hDialog, SW_SHOW);
if (Normalization_Flag)
SendDlgItemMessage(hDialog, IDC_NORM_CHECK, BM_SETCHECK, BST_CHECKED, 0);
return true;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_NORM_CHECK:
if (SendDlgItemMessage(hDialog, IDC_NORM_CHECK, BM_GETCHECK, 1, 0)==BST_CHECKED)
{
CheckMenuItem(hMenu, IDM_NORM, MF_CHECKED);
Normalization_Flag = true;
}
else
{
CheckMenuItem(hMenu, IDM_NORM, MF_UNCHECKED);
Normalization_Flag = false;
}
break;
case IDCANCEL:
DestroyWindow(hDialog);
NormDlg_Flag = false;
return true;
}
break;
case WM_HSCROLL:
if (GetWindowLong((HWND)lParam, GWL_ID)==IDC_NORM_SLIDER)
{
Norm_Ratio = SendDlgItemMessage(hDialog, IDC_NORM_SLIDER, TBM_GETPOS, 0, 0);
sprintf(szTemp, "%d", Norm_Ratio);
SetDlgItemText(hDialog, IDC_NORM, szTemp);
}
break;
}
return false;
}
/* register the window class */
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = false;
wcex.cbWndExtra = false;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MOVIE);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = CreateSolidBrush(MASKCOLOR);
wcex.lpszMenuName = (LPCSTR)IDC_GUI;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
char *ExtFilter[3] =
{
".avi", ".d2v", ".wav"
};
BOOL PopFileDlg(PTSTR pstrFileName, HWND hOwner, int Status)
{
static char *szFilter, *ext;
int count = 0;
switch (Status)
{
case OPEN_VOB:
szFilter = TEXT ("MPEG-2 Stream (*.vob; *.m2p; *.m2v)\0*.vob;*.m2p;*.m2v\0") \
TEXT ("All Files (*.*)\0*.*\0");
break;
case SAVE_AVI:
szFilter = TEXT ("AVI File (*.avi)\0*.avi; *.ac3; *.wav; *.mpa\0") \
TEXT ("All Files (*.*)\0*.*\0");
break;
case OPEN_D2V:
szFilter = TEXT ("DVD2AVI Project File (*.d2v)\0*.d2v\0") \
TEXT ("All Files (*.*)\0*.*\0");
break;
case SAVE_D2V:
szFilter = TEXT ("DVD2AVI Project File (*.d2v)\0*.d2v; *.ac3; *.wav; *.mpa\0") \
TEXT ("All Files (*.*)\0*.*\0");
break;
case OPEN_WAV:
case SAVE_WAV:
szFilter = TEXT ("WAV File (*.wav)\0*.wav\0") \
TEXT ("All Files (*.*)\0*.*\0");
break;
}
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hOwner ;
ofn.hInstance = hInst ;
ofn.lpstrFilter = szFilter ;
ofn.nMaxFile = _MAX_PATH ;
ofn.nMaxFileTitle = _MAX_PATH ;
ofn.lpstrFile = pstrFileName ;
switch (Status)
{
case OPEN_VOB:
case OPEN_D2V:
case OPEN_WAV:
ofn.Flags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST;
return GetOpenFileName(&ofn);
case SAVE_WAV:
count++;
case SAVE_D2V:
count++;
case SAVE_AVI:
ofn.Flags = OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
if (GetSaveFileName(&ofn))
{
ext = strrchr(pstrFileName, '.');
if (ext!=NULL && !_strnicmp(ext, ExtFilter[count], 4))
strncpy(ext, ext+4, 1);
return true;
}
}
return false;
}
static DWORD DDColorMatch(LPDIRECTDRAWSURFACE pdds, COLORREF rgb)
{
COLORREF rgbT;
DWORD dw = CLR_INVALID;
HRESULT hres;
HDC hdc;
if (IDirectDrawSurface_GetDC(pdds, &hdc)==DD_OK)
{
rgbT = GetPixel(hdc, 0, 0); // Save current pixel value
SetPixel(hdc, 0, 0, rgb); // Set our value
IDirectDrawSurface_ReleaseDC(pdds, hdc);
}
ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(DDSURFACEDESC);
while ((hres = IDirectDrawSurface_Lock(pdds, NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
;
if (hres==DD_OK)
{
dw = *(DWORD *) ddsd.lpSurface;
if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;
IDirectDrawSurface_Unlock(pdds, NULL);
}
if (IDirectDrawSurface_GetDC(pdds, &hdc)==DD_OK)
{
SetPixel(hdc, 0, 0, rgbT);
IDirectDrawSurface_ReleaseDC(pdds, hdc);
}
return dw;
}
static void ShowStatistics(int refresh)
{
if (refresh)
{
if (Statistics_Flag)
DestroyWindow(hDlg);
Statistics_Flag = true;
hDlg = CreateDialog(hInst, (LPCTSTR)IDD_STATISTICS, hWnd, (DLGPROC)Statistics);
}
if (Statistics_Flag)
{
// resize window
GetWindowRect(hDlg, &crect);
GetWindowRect(hWnd, &wrect);
MoveWindow(hDlg, wrect.right, wrect.top+Edge_Height-Edge_Width/2, crect.right-crect.left, crect.bottom-crect.top, true);
ShowWindow(hDlg, SW_SHOW);
SetFocus(hWnd);
}
}
static void DisableControl()
{
EnableWindow(hTrack, false);
EnableWindow(hLeftButton, false);
EnableWindow(hLeftArrow, false);
EnableWindow(hRightArrow, false);
EnableWindow(hRightButton, false);
DragAcceptFiles(hWnd, false);
}
static void ClearTrack()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -