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

📄 main.cpp

📁 <VC++视频音频开发>一书的光盘资料。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				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 + -