⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.cpp

📁 DVD转换到AVI的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -