main.c

来自「AAC编解码源码」· C语言 代码 · 共 678 行 · 第 1/2 页

C
678
字号

			SetRect(&bar1, 0, height - 23, (int)(file_complete * width), height - 13);
			SetRect(&bar2, 0, height - 12, (int)(percomp * width), height - 2);

			FillRect(offscreen, &bar1, (HBRUSH)GetStockObject(LTGRAY_BRUSH));
			FillRect(offscreen, &bar2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));

			if (fileName)
			{
				char* sep;
				char  fileCaption[80];

				if ((sep = strrchr(fileName, '\\')) != 0)
					fileName = sep+1;

				(void) strcpy(fileCaption, "   ");
				(void) strcat(fileCaption, fileName);

				DrawText(offscreen, fileCaption, -1, &bar1, DT_SINGLELINE | DT_LEFT);
			}

			SelectObject(offscreen, dfltFont);
			SetBkMode(offscreen, dfltBGMode);

			BitBlt(hdc, 0, 0, width, height, offscreen, 0, 0, SRCCOPY);

			EndPaint(hwnd, &ps);

			return DefWindowProc(hwnd, message, wParam, lParam);
			//return 0;

		case WM_TIMER:
			if (animate || frame)
			{
				frame++;
				if (frame > 7) 
					frame -= 8;
			}
			else
			{
				frame = 0;
			}
			GetClientRect(hwnd, &rect);
			InvalidateRect(hwnd, &rect, FALSE);
			return 0;

		case WM_LBUTTONDOWN:
			start.x = LOWORD(lParam);
			start.y = HIWORD(lParam);
			ClientToScreen(hwnd, &start);
			GetWindowRect(hwnd, &rect);
			start.x -= rect.left;
			start.y -= rect.top;
			dragging = 1;
			SetCapture(hwnd);
			return 0;

		case WM_LBUTTONUP:
			if (dragging)
			{
				dragging = 0;
				ReleaseCapture();
			}
			return 0;

		case WM_MOUSEMOVE:
			if (dragging)
			{
				point.x = LOSHORT(lParam);
				point.y = HISHORT(lParam);

				/* lParam can contain negative coordinates !
				 * point.x = LOWORD(lParam);
				 * point.y = HIWORD(lParam);
				 */

				ClientToScreen(hwnd, &point);
				SetWindowPos(hwnd, 0, point.x - start.x, point.y - start.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
				iniSettings.window_x = point.x - start.x;
				iniSettings.window_y = point.y - start.y;
			}
			return 0;

		case WM_CAPTURECHANGED:
			if (dragging)
			{
				dragging = 0;
				ReleaseCapture();
			}
			return 0;

		case WM_RBUTTONUP:
			point.x = LOWORD(lParam);
			point.y = HIWORD(lParam);
			ClientToScreen(hwnd, &point);
			TrackPopupMenu(menu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);
			return 0;

		case WM_COMMAND:
			switch (LOWORD(wParam)) 
			{
				case IDM_QUIT:
					WriteIniFile(INI_FILE);
					decoding_done = 1;
					PostQuitMessage(0);
					break;
				case IDM_ONTOP:
					set_always_on_top(hwnd, ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED);
					break;	
				case IDM_LOGERR:
					set_logerr(hwnd, ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED);
					break;
				case IDM_STOP_DEC:
				{
					int v = ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED;
					if(v == 8)
						stop_decoding = 1;
					break;
				}
				case IDM_VOLUME:
				{
					int value = 
					DialogBox(
					hinst,  
					MAKEINTRESOURCE(IDD_VOLUME),   
					hwnd, QCProc);

					if (value == -2)
						break;
					break;
				}
				case IDM_ABOUT:
				{
					int value = DialogBox(hinst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, QCProc);
					if (value == -7)
						break;
					break;
				}

			} // LOWORD(wParam)
			return 0;

		case WM_DROPFILES:
			hdrop = (HANDLE)wParam;
			HandleDrag(hwnd, hdrop);
			return 0;
	
		case WM_DESTROY:
			decoding_done = 1;
			PostQuitMessage(0);
			return 0;
	}

	return DefWindowProc(hwnd, message, wParam, lParam);
}

/*
 *  Encode parameters dialog procedures.
 */

BOOL CALLBACK QCProc(HWND hwndDlg, UINT message, 
                     WPARAM wParam, LPARAM lParam) 
{
	switch (message) 
	{ 
		case WM_INITDIALOG: 
 
			if(iniSettings.decode_mode == 0)
			{
				CheckDlgButton(hwndDlg,IDC_PLAYBACK,TRUE);
				CheckDlgButton(hwndDlg,IDC_WAV,TRUE);
				if(iniSettings.outputFormat != 1
					&& iniSettings.outputFormat != 5
					&& iniSettings.outputFormat != 6
					&& iniSettings.outputFormat != 7
					&& iniSettings.outputFormat != 8)
					CheckDlgButton(hwndDlg,IDC_16BIT,TRUE);
				else if(iniSettings.outputFormat == 1)
					CheckDlgButton(hwndDlg,IDC_16BIT,TRUE);
				else if(iniSettings.outputFormat == 5)
					CheckDlgButton(hwndDlg,IDC_16BIT_DITHER,TRUE);
				else if(iniSettings.outputFormat == 6)
					CheckDlgButton(hwndDlg,IDC_16BIT_L_SHAPE,TRUE);
				else if(iniSettings.outputFormat == 7)
					CheckDlgButton(hwndDlg,IDC_16BIT_M_SHAPE,TRUE);
				else if(iniSettings.outputFormat == 8)
					CheckDlgButton(hwndDlg,IDC_16BIT_H_SHAPE,TRUE);
				CheckDlgButton(hwndDlg,IDC_WAV,TRUE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_AIFF), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_SUNAU), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_DECAU), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_24BIT), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_32BIT), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_FLOATS), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT), TRUE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_DITHER), TRUE);
			}
			else if(iniSettings.decode_mode == 1)
			{
				CheckDlgButton(hwndDlg,IDC_PLAYBACK,FALSE);
				if(iniSettings.outputFormat == 1)
					CheckDlgButton(hwndDlg,IDC_16BIT,TRUE);
				else if(iniSettings.outputFormat == 2)
					CheckDlgButton(hwndDlg,IDC_24BIT,TRUE);
				else if(iniSettings.outputFormat == 3)
					CheckDlgButton(hwndDlg,IDC_32BIT,TRUE);
				else if(iniSettings.outputFormat == 4)
					CheckDlgButton(hwndDlg,IDC_FLOATS,TRUE);
				else if(iniSettings.outputFormat == 5)
					CheckDlgButton(hwndDlg,IDC_16BIT_DITHER,TRUE);
				else if(iniSettings.outputFormat == 6)
					CheckDlgButton(hwndDlg,IDC_16BIT_L_SHAPE,TRUE);
				else if(iniSettings.outputFormat == 7)
					CheckDlgButton(hwndDlg,IDC_16BIT_M_SHAPE,TRUE);
				else if(iniSettings.outputFormat == 8)
					CheckDlgButton(hwndDlg,IDC_16BIT_H_SHAPE,TRUE);

				if(iniSettings.fileType == 1)
					CheckDlgButton(hwndDlg,IDC_WAV,TRUE);
				else if(iniSettings.fileType == 2)
					CheckDlgButton(hwndDlg,IDC_AIFF,TRUE);
				else if(iniSettings.fileType == 3)
					CheckDlgButton(hwndDlg,IDC_SUNAU,TRUE);
				else if(iniSettings.fileType == 4)
					CheckDlgButton(hwndDlg,IDC_DECAU,TRUE);
			}

			if(iniSettings.object_type == 0)
				CheckDlgButton(hwndDlg,IDC_MAIN,TRUE);
			else if(iniSettings.object_type == 1)
				CheckDlgButton(hwndDlg,IDC_LC,TRUE);
			else if(iniSettings.object_type == 3)
				CheckDlgButton(hwndDlg,IDC_LTP,TRUE);
			else if(iniSettings.object_type == 23)
				CheckDlgButton(hwndDlg,IDC_LD,TRUE);
			break;

		case WM_CLOSE:
			EndDialog(hwndDlg, -1);
			break;

		case WM_COMMAND: 
			switch (LOWORD(wParam)) 
			{
				case IDC_BUTTON1:
				{
					if (IsDlgButtonChecked(hwndDlg, IDC_PLAYBACK) == BST_CHECKED)
						set_decode_mode(0);            // Playback
					else if (IsDlgButtonChecked(hwndDlg, IDC_DECODE) == BST_CHECKED)
						set_decode_mode(1);            // Decode to File

					if (IsDlgButtonChecked(hwndDlg, IDC_WAV) == BST_CHECKED)
						set_fileType(1);             // Microsoft WAV
					else if (IsDlgButtonChecked(hwndDlg, IDC_AIFF) == BST_CHECKED)
						set_fileType(2);             // Apple/SGI AIFF
					else if (IsDlgButtonChecked(hwndDlg, IDC_SUNAU) == BST_CHECKED)
						set_fileType(3);             // Sun/NeXT AU
					else if (IsDlgButtonChecked(hwndDlg, IDC_DECAU) == BST_CHECKED)
						set_fileType(4);             // DEC AU

					if (IsDlgButtonChecked(hwndDlg, IDC_16BIT) == BST_CHECKED)
						set_outputFormat(1);             // 16 bit PCM
					else if (IsDlgButtonChecked(hwndDlg, IDC_24BIT) == BST_CHECKED)
						set_outputFormat(2);             // 24 bit PCM
					else if (IsDlgButtonChecked(hwndDlg, IDC_32BIT) == BST_CHECKED)
						set_outputFormat(3);             // 32 bit PCM
					else if (IsDlgButtonChecked(hwndDlg, IDC_FLOATS) == BST_CHECKED)
						set_outputFormat(4);             // 32 bit floats
					else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_DITHER) == BST_CHECKED)
						set_outputFormat(5);             // 16 bit PCM dithered
					else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_L_SHAPE) == BST_CHECKED)
						set_outputFormat(6);             // dithered LIGHT noise shaping
					else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_M_SHAPE) == BST_CHECKED)
						set_outputFormat(7);             // dithered MEDIUM noise shaping
					else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_H_SHAPE) == BST_CHECKED)
						set_outputFormat(8);             // dithered HEAVY noise shaping

					if (IsDlgButtonChecked(hwndDlg, IDC_MAIN) == BST_CHECKED)
						set_object_type(0);             // Main
					else if (IsDlgButtonChecked(hwndDlg, IDC_LC) == BST_CHECKED)
						set_object_type(1);             // Low Complexity
					else if (IsDlgButtonChecked(hwndDlg, IDC_LTP) == BST_CHECKED)
						set_object_type(3);             // Long Term Prediction
					else if (IsDlgButtonChecked(hwndDlg, IDC_LD) == BST_CHECKED)
						set_object_type(23);            // Low Delay

					EndDialog(hwndDlg, -2);
					return TRUE;
				}
				case IDC_BUTTON6:
					EndDialog(hwndDlg, -7);
					return TRUE;

				case IDC_PLAYBACK:
					CheckDlgButton(hwndDlg,IDC_WAV,TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_AIFF), FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_SUNAU), FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_DECAU), FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_24BIT), FALSE);
					CheckDlgButton(hwndDlg,IDC_24BIT,FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_32BIT), FALSE);
					CheckDlgButton(hwndDlg,IDC_32BIT,FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_FLOATS), FALSE);
					CheckDlgButton(hwndDlg,IDC_FLOATS,FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_DITHER), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_L_SHAPE), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_M_SHAPE), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_H_SHAPE), TRUE);
					if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_DITHER) != BST_CHECKED
						&& IsDlgButtonChecked(hwndDlg, IDC_16BIT_L_SHAPE) != BST_CHECKED
						&& IsDlgButtonChecked(hwndDlg, IDC_16BIT_M_SHAPE) != BST_CHECKED
						&& IsDlgButtonChecked(hwndDlg, IDC_16BIT_H_SHAPE) != BST_CHECKED)
						CheckDlgButton(hwndDlg,IDC_16BIT,TRUE);
					break;
				case IDC_DECODE:
					EnableWindow(GetDlgItem(hwndDlg, IDC_AIFF), FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_SUNAU), FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_DECAU), FALSE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_24BIT), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_32BIT), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_FLOATS), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_DITHER), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_L_SHAPE), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_M_SHAPE), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_H_SHAPE), TRUE);
					break;
				default:
					break;
       	  		}
	}
	return FALSE; 
}


/******************************** end of main.c ********************************/

⌨️ 快捷键说明

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