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

📄 gui.cpp

📁 DVD转换到AVI的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
{
	CheckMenuItem(hMenu, IDM_TRACK_NONE, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_1, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_2, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_3, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_4, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_5, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_6, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_7, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TRACK_8, MF_UNCHECKED);
}

static void CheckCPU()
{
	__asm
	{
		mov			eax, 1
		cpuid
		test		edx, 0x00800000
		jz			TEST_SSE
		mov			[cpu.mmx], 1
TEST_SSE:
		test		edx, 0x02000000
		jz			TEST_AMD
		mov			[cpu.sse], 1
TEST_AMD:
		mov			eax, 0x80000001
		cpuid
		test		edx, 0x80000000
		jz			TEST_END
		mov			[cpu.amd], 1
TEST_END:
	}

	if (cpu.mmx)
		CheckMenuItem(hMenu, IDM_MMX, MF_CHECKED);

	if (cpu.sse)
		CheckMenuItem(hMenu, IDM_SSE, MF_CHECKED);

	if (cpu.amd)
		CheckMenuItem(hMenu, IDM_AMD, MF_CHECKED);

	EnableMenuItem(hMenu, IDM_SSE, MF_GRAYED);
	EnableMenuItem(hMenu, IDM_AMD, MF_GRAYED);
}

static void CheckINI()
{
	if ((INIFile = fopen("DVD2AVI.ini", "r")) == NULL)
	{
NEW_VERSION:
		INIT_X = 0;
		INIT_Y = 0;
		INI_Version = INI_VERSION;
		iDCT_Flag = IDCT_MMX;
		Scale_Flag = true;
		FO_Flag = FO_NONE;
		Track_Flag = TRACK_1;
		Format_Flag = FORMAT_AUTO;
		AC3_Flag = AUDIO_DECODE;
		DRC_Flag = DRC_NORMAL;
		DSDown_Flag = false;
		MPA_Flag = AUDIO_DEMUXONE;
		SRC_Flag = SRC_NONE;
		Norm_Ratio = 100;
		Priority_Flag = PRIORITY_NORMAL;
	}
	else
	{
		fscanf(INIFile, "INI_Version=%d\n", &INI_Version);
		if (INI_Version != INI_VERSION)
		{
			fclose(INIFile);
			goto NEW_VERSION;
		}

		fscanf(INIFile, "INIT_X=%d\n", &INIT_X);
		fscanf(INIFile, "INIT_Y=%d\n", &INIT_Y);
		fscanf(INIFile, "iDCT_Algorithm=%d\n", &iDCT_Flag);
		fscanf(INIFile, "YUVRGB_Scale=%d\n", &Scale_Flag);
		fscanf(INIFile, "Field_Operation=%d\n", &FO_Flag);
		fscanf(INIFile, "Track_Number=%d\n", &Track_Flag);
		fscanf(INIFile, "Channel_Format=%d\n", &Format_Flag);
		fscanf(INIFile, "AC3=%d\n", &AC3_Flag);
		fscanf(INIFile, "DR_Control=%d\n", &DRC_Flag);
		fscanf(INIFile, "DS_Downmix=%d\n", &DSDown_Flag);
		fscanf(INIFile, "MPA=%d\n", &MPA_Flag);
		fscanf(INIFile, "SRC_Precision=%d\n", &SRC_Flag);
		fscanf(INIFile, "Norm_Ratio=%d\n", &Norm_Ratio);
		fscanf(INIFile, "Process_Priority=%d\n", &Priority_Flag);

		fclose(INIFile);
	}
}

static void CheckFlag()
{
	CheckMenuItem(hMenu, IDM_IDCT_MMX, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_IDCT_FPU, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_IDCT_REF, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_PCSCALE, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_TVSCALE, MF_UNCHECKED);
	CheckMenuItem(hMenu, IDM_FO_FILM, MF_UNCHECKED);

	switch (iDCT_Flag)
	{
		case IDCT_MMX:
			CheckMenuItem(hMenu, IDM_IDCT_MMX, MF_CHECKED);
			break;

		case IDCT_FPU:
			CheckMenuItem(hMenu, IDM_IDCT_FPU, MF_CHECKED);
			break;

		case IDCT_REF:
			CheckMenuItem(hMenu, IDM_IDCT_REF, MF_CHECKED);
			break;
	}

	if (Scale_Flag)
	{
		YUVRGB_Scale = 0x1000254310002543;
		YUVRGB_Offset = 0x0010001000100010;
		CheckMenuItem(hMenu, IDM_PCSCALE, MF_CHECKED);
	}
	else
	{
		YUVRGB_Scale = 0x1000200010002000;
		YUVRGB_Offset = 0x0000000000000000;
		CheckMenuItem(hMenu, IDM_TVSCALE, MF_CHECKED);
	}

	switch (FO_Flag)
	{
		case FO_NONE:
			CheckMenuItem(hMenu, IDM_FO_NONE, MF_CHECKED);
			CheckMenuItem(hMenu, IDM_FO_FILM, MF_UNCHECKED);
			CheckMenuItem(hMenu, IDM_FO_SWAP, MF_UNCHECKED);
			break;

		case FO_FILM:
			CheckMenuItem(hMenu, IDM_FO_NONE, MF_UNCHECKED);
			CheckMenuItem(hMenu, IDM_FO_FILM, MF_CHECKED);
			CheckMenuItem(hMenu, IDM_FO_SWAP, MF_UNCHECKED);
			break;

		case FO_SWAP:
			CheckMenuItem(hMenu, IDM_FO_NONE, MF_UNCHECKED);
			CheckMenuItem(hMenu, IDM_FO_FILM, MF_UNCHECKED);
			CheckMenuItem(hMenu, IDM_FO_SWAP, MF_CHECKED);
			break;
	}

	switch (Track_Flag)
	{
		case TRACK_NONE:
			CheckMenuItem(hMenu, IDM_TRACK_NONE, MF_CHECKED);
			break;

		case TRACK_1:
			CheckMenuItem(hMenu, IDM_TRACK_1, MF_CHECKED);
			break;

		case TRACK_2:
			CheckMenuItem(hMenu, IDM_TRACK_2, MF_CHECKED);
			break;

		case TRACK_3:
			CheckMenuItem(hMenu, IDM_TRACK_3, MF_CHECKED);
			break;

		case TRACK_4:
			CheckMenuItem(hMenu, IDM_TRACK_4, MF_CHECKED);
			break;

		case TRACK_5:
			CheckMenuItem(hMenu, IDM_TRACK_5, MF_CHECKED);
			break;

		case TRACK_6:
			CheckMenuItem(hMenu, IDM_TRACK_6, MF_CHECKED);
			break;

		case TRACK_7:
			CheckMenuItem(hMenu, IDM_TRACK_7, MF_CHECKED);
			break;

		case TRACK_8:
			CheckMenuItem(hMenu, IDM_TRACK_8, MF_CHECKED);
			break;
	}

	switch (Format_Flag)
	{
		case FORMAT_AC3:
			CheckMenuItem(hMenu, IDM_AC3, MF_CHECKED);
			break;

		case FORMAT_MPA:
			CheckMenuItem(hMenu, IDM_MPA, MF_CHECKED);
			break;

		case FORMAT_LPCM:
			CheckMenuItem(hMenu, IDM_LPCM, MF_CHECKED);
			break;

		case FORMAT_AUTO:
			CheckMenuItem(hMenu, IDM_SELECT, MF_CHECKED);
			break;
	}

	switch (AC3_Flag)
	{
		case AUDIO_DEMUXALL:
			CheckMenuItem(hMenu, IDM_AC3_DEMUXALL, MF_CHECKED);
			break;

		case AUDIO_DEMUXONE:
			CheckMenuItem(hMenu, IDM_AC3_DEMUXONE, MF_CHECKED);
			break;

		case AUDIO_DECODE:
			CheckMenuItem(hMenu, IDM_AC3_DECODE, MF_CHECKED);
			break;
	}

	switch (DRC_Flag)
	{
		case DRC_NONE:
			CheckMenuItem(hMenu, IDM_DRC_NONE, MF_CHECKED);
			break;

		case DRC_LIGHT:
			CheckMenuItem(hMenu, IDM_DRC_LIGHT, MF_CHECKED);
			break;

		case DRC_NORMAL:
			CheckMenuItem(hMenu, IDM_DRC_NORMAL, MF_CHECKED);
			break;

		case DRC_HEAVY:
			CheckMenuItem(hMenu, IDM_DRC_HEAVY, MF_CHECKED);
			break;
	}

	if (DSDown_Flag)
		CheckMenuItem(hMenu, IDM_DSDOWN, MF_CHECKED);

	switch (MPA_Flag)
	{
		case AUDIO_DEMUXALL:
			CheckMenuItem(hMenu, IDM_MPA_DEMUXALL, MF_CHECKED);
			break;

		case AUDIO_DEMUXONE:
			CheckMenuItem(hMenu, IDM_MPA_DEMUXONE, MF_CHECKED);
			break;
	}

	switch (SRC_Flag)
	{
		case SRC_NONE:
			CheckMenuItem(hMenu, IDM_SRC_NONE, MF_CHECKED);
			break;

		case SRC_LOW:
			CheckMenuItem(hMenu, IDM_SRC_LOW, MF_CHECKED);
			break;

		case SRC_MID:
			CheckMenuItem(hMenu, IDM_SRC_MID, MF_CHECKED);
			break;

		case SRC_HIGH:
			CheckMenuItem(hMenu, IDM_SRC_HIGH, MF_CHECKED);
			break;

		case SRC_UHIGH:
			CheckMenuItem(hMenu, IDM_SRC_UHIGH, MF_CHECKED);
			break;
	}

	if (Norm_Ratio > 100)
	{
		CheckMenuItem(hMenu, IDM_NORM, MF_CHECKED);
		Normalization_Flag = true;
		Norm_Ratio -= 100;
	}

	switch (Priority_Flag)
	{
		case PRIORITY_HIGH:
			CheckMenuItem(hMenu, IDM_PP_HIGH, MF_CHECKED);
			SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
			break;

		case PRIORITY_NORMAL:
			CheckMenuItem(hMenu, IDM_PP_NORMAL, MF_CHECKED);
			break;

		case PRIORITY_LOW:
			CheckMenuItem(hMenu, IDM_PP_LOW, MF_CHECKED);
			SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS);
			break;
	}
}

static void Recovery()
{
	int i;

	if (Check_Flag)
	{
		if (lpDD2)
			lpDD2->Release();
		if (lpDD)
			lpDD->Release();

		for (i=0; i<3; i++)
		{
			free(backward_reference_frame[i]);
			free(forward_reference_frame[i]);
			free(auxframe[i]);
		}

		free(u422);
		free(v422);
		free(u444);
		free(v444);
		free(rgb24);
		free(yuy2);
		free(lum);
	}

	Check_Flag = false;
	DDOverlay_Flag = false;

	EnableMenuItem(hMenu, 1, MF_BYPOSITION | MF_GRAYED);
	CheckMenuItem(hMenu, IDM_DIRECTDRAW, MF_UNCHECKED);

	SendMessage(hTrack, TBM_SETPOS, (WPARAM) true, 0);
	SendMessage(hTrack, TBM_SETSEL, (WPARAM) true, (LPARAM) MAKELONG(0, 0));

	DisableControl();

	EnableMenuItem(hMenu, IDM_PREVIEW, MF_GRAYED);
	EnableMenuItem(hMenu, IDM_SAVE, MF_GRAYED);
	EnableMenuItem(hMenu, IDM_SAVE_D2V, MF_GRAYED);
	EnableMenuItem(hMenu, IDM_BMP, MF_GRAYED);
	EnableMenuItem(hMenu, IDM_PROCESS_WAV, MF_ENABLED);

	SetWindowText(hWnd, "DVD2AVI");

	if (File_Limit)
	{
		EnableMenuItem(hMenu, IDM_PROCESS_WAV, MF_GRAYED);

		ZeroMemory(&process, sizeof(PROCESS));
		process.trackright = TRACK_PITCH;

		SystemStream_Flag = false;
		Display_Flag = true;

		for (i=0; i<File_Limit; i++)
		{
			process.length[i] = _filelengthi64(Infile[i]);
			process.total += process.length[i];
		}
	}
	else
		DragAcceptFiles(hWnd, true);
}

void ResizeWindow(int width, int height)
{
	GetWindowRect(hWnd, &wrect);
	MoveWindow(hTrack, 0, height, width-4*TRACK_HEIGHT, TRACK_HEIGHT, true);
	MoveWindow(hLeftButton, width-4*TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
	MoveWindow(hLeftArrow, width-3*TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
	MoveWindow(hRightArrow, width-2*TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
	MoveWindow(hRightButton, width-TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
	MoveWindow(hWnd, wrect.left, wrect.top, width+Edge_Width, height+Edge_Height+TRACK_HEIGHT, true);
}

void CheckDirectDraw(int width, int height)
{
	if (DirectDrawCreate(NULL, &lpDD, NULL)==DD_OK)
	{
		if (lpDD->QueryInterface(IID_IDirectDraw2, (LPVOID*)&lpDD2)==DD_OK)
		{
			if (lpDD2->SetCooperativeLevel(hWnd, DDSCL_NORMAL)==DD_OK)
			{
				ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));
				ddsd.dwSize = sizeof(DDSURFACEDESC);
				ddsd.dwFlags = DDSD_CAPS;
				ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;

				if (lpDD2->CreateSurface(&ddsd, &lpPrimary, NULL)==DD_OK)
				{
					ZeroMemory(&halcaps, sizeof(DDCAPS));
					halcaps.dwSize = sizeof(DDCAPS);

					if (lpDD2->GetCaps(&halcaps, NULL)==DD_OK)
					{
						if (halcaps.dwCaps & DDCAPS_OVERLAY)
						{
							DDPIXELFORMAT ddPixelFormat;
							ddPixelFormat.dwFlags = DDPF_FOURCC;
							ddPixelFormat.dwFourCC = mmioFOURCC('Y','U','Y','2');
							ddPixelFormat.dwYUVBitCount = 16;

							ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));
							ddsd.dwSize = sizeof(DDSURFACEDESC);
							ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
							ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
							ddsd.dwWidth = width;
							ddsd.dwHeight = height;

							memcpy(&(ddsd.ddpfPixelFormat), &ddPixelFormat, sizeof(DDPIXELFORMAT));

							if (lpDD2->CreateSurface(&ddsd, &lpOverlay, NULL)==DD_OK)
							{
								DDOverlay_Flag = true;
								CheckMenuItem(hMenu, IDM_DIRECTDRAW, MF_CHECKED);

								ZeroMemory(&ddofx, sizeof(DDOVERLAYFX));
								ddofx.dwSize = sizeof(DDOVERLAYFX);

								ddofx.dckDestColorkey.dwColorSpaceLowValue = DDColorMatch(lpPrimary, MASKCOLOR);
								ddofx.dckDestColorkey.dwColorSpaceHighValue = ddofx.dckDestColorkey.dwColorSpaceLowValue;
							}
						}
					}
				}
			}
		}
	}

	if (DDOverlay_Flag)
	{
		Store_Flag = STORE_YUY2;
		CheckMenuItem(hMenu, IDM_STORE_RGB24, MF_UNCHECKED);
		CheckMenuItem(hMenu, IDM_STORE_YUY2, MF_CHECKED);
		EnableMenuItem(hMenu, IDM_BMP, MF_GRAYED);
	}
	else
	{
		Store_Flag = STORE_RGB24;
		CheckMenuItem(hMenu, IDM_STORE_RGB24, MF_CHECKED);
		CheckMenuItem(hMenu, IDM_STORE_YUY2, MF_UNCHECKED);
		EnableMenuItem(hMenu, IDM_BMP, MF_ENABLED);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -