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

📄 main.cpp

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

		  default:
			  return 0;
		}
		break;
	}

  return FALSE;
}

/**************************************************************************************
 *                                                                                    *
 *                                 DlgProc用于关于对话框                              *
 *                        -----------------------------------                         *
 **************************************************************************************/

int APIENTRY AboutDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{
  switch (wMsg)
    {
      case WM_INITDIALOG:
        return (0);
		break;

      case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
          {
          EndDialog (hDlg, TRUE);
          return (TRUE);
          }
        break;

	  case WM_COMMAND:

        switch (wParam)
		{
		  case IDB_ABOUT_OK:
			
			  EndDialog(hDlg, TRUE);
			  return TRUE;
			  break;

		  default:
			  return 0;
		}
		break;
	}

  return FALSE;
}

/**************************************************************************************
 *                                                                                    *
 *                              DlgProc用于外壳浏览对话框                             *
 *                        -----------------------------------                         *
 **************************************************************************************/

int APIENTRY SkinBrowserDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{
  switch (wMsg)
    {
      case WM_INITDIALOG:

		  int i;
		  
		  /*
		   * 初始化外壳链表
		   */
			

		  SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) "[Default Skin]");
		  SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, 0, 0); 
		  
		  if(skinList->skinsDir != NULL) {

			  SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_ADDSTRING, 0, (LONG)skinList->skinsDir);
		      SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_SETCURSEL, 0, 0);
		  }

		  skinList->Scan();

		  for(i=0; i < skinList->getNumberOfSkins(); i++) {
		  
			  SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) skinList->getSkinInfo(i)->name);

			  if(strcmp(skinList->getSkinInfo(i)->directory, skinPath) == 0) {

				  SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, i+1, 0); 
			  }
		  }

		  return (0);
		break;

      case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
          {
          EndDialog (hDlg, TRUE);
          return (TRUE);
          }
        break;

	  case WM_COMMAND:

	    switch (LOWORD(wParam))  {
		  
          case IDC_SKIN_LIST: 
              
			  switch (HIWORD(wParam)) { 
                  
			  case LBN_SELCHANGE:
				  
				  int nItem;

				  nItem = SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_GETCURSEL, 0, 0); 

				  if(nItem == 0) {
					  
					  RECT rect;

					  skin->LoadDefault(hInstance, hwnd);
					  strcpy(skinPath, "Default");

					  UpdateMainWindow();
				  }
				  else {
					  
					  RECT rect;

					  skin->Load(skinList->getSkinInfo(nItem - 1)->directory, hwnd);
					  strcpy(skinPath, skinList->getSkinInfo(nItem  - 1)->directory);

					  UpdateMainWindow();
				  }

				  break;
			  }
		}

        switch (wParam)
		{
		  case IDB_SKINS_OK:
			
			  EndDialog(hDlg, TRUE);
			  return TRUE;
			  break;
		  
		  case ID_SKINS_CANCEL:
			
			  EndDialog(hDlg, TRUE);
			  return TRUE;
			  break;

		  case IDC_CHANGE_DIR:

			  dirChooser = new CDirDialog();

			  if(dirChooser->DoBrowse()) {
				
				skinList->SetDir(dirChooser->m_strPath);

				SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_RESETCONTENT, 0, 0);
				SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_RESETCONTENT, 0, 0);

				SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) "[Default Skin]");
				SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, 0, 0); 
			
				if(skinList->skinsDir != NULL) {
	
				  SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_ADDSTRING, 0, (LONG)skinList->skinsDir);
			      SendMessage(GetDlgItem(hDlg, IDC_COMBO_DIR), CB_SETCURSEL, 0, 0);
			  }

			  skinList->Scan();

			  for(i=0; i < skinList->getNumberOfSkins(); i++) {
			  
				  SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_ADDSTRING, 0, (LONG) skinList->getSkinInfo(i)->name);

				  if(strcmp(skinList->getSkinInfo(i)->directory, skinPath) == 0) {
	
					  SendMessage(GetDlgItem(hDlg, IDC_SKIN_LIST), LB_SETCURSEL, 0, 0); 
				  }
			  }	
			
			  }
			  break;

		  default:
			  return 0;
		}
		break;
	}

  return FALSE;
}

/**************************************************************************************
 *                                                                                    *
 *                             DlgProc用于打开URL对话框                               *
 *                        -----------------------------------                         *
 **************************************************************************************/

int APIENTRY UrlDlgProc (HWND hDlg, WORD wMsg, LONG wParam, LONG lParam)
{

  switch (wMsg)
    {
      case WM_INITDIALOG:

		  SendMessage(GetDlgItem(hDlg, IDC_RADIO_HTTP), BM_SETCHECK, BST_CHECKED, 0);

		  EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), FALSE);
		  EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), FALSE);
		  EnableWindow(GetDlgItem(hDlg, IDC_CHECK_ANONYMOUS),     FALSE);
		  EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_SERVER),   FALSE);
		  EnableWindow(GetDlgItem(hDlg, IDC_COMBO_FTP),           FALSE);
		  EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME),       FALSE);
		  EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD),       FALSE);

		  return (0);
		break;

      case WM_SYSCOMMAND:

        if (wParam == SC_CLOSE) {

            EndDialog (hDlg, TRUE);
            return (TRUE);
        }
        break;

	  case WM_COMMAND:

        switch (wParam)
		{

		case IDC_RADIO_HTTP:

		    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_CHECK_ANONYMOUS),     FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_SERVER),   FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_COMBO_FTP),           FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME),       FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD),       FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_EXAMPLE),             TRUE);
			
		    EnableWindow(GetDlgItem(hDlg, IDC_COMBO_HTTP),  TRUE);
		    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_HTTP), TRUE);
			break;

		case IDC_RADIO_FTP:

		    EnableWindow(GetDlgItem(hDlg, IDC_CHECK_ANONYMOUS),     TRUE);
		    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_SERVER),   TRUE);
		    EnableWindow(GetDlgItem(hDlg, IDC_COMBO_FTP),    TRUE);
			
		    EnableWindow(GetDlgItem(hDlg, IDC_COMBO_HTTP),  FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_HTTP), FALSE);
		    EnableWindow(GetDlgItem(hDlg, IDC_EXAMPLE),     FALSE);

			anonymous = 1;
		    CheckDlgButton(hDlg, IDC_CHECK_ANONYMOUS, TRUE);
			break;

		case IDC_CHECK_ANONYMOUS:

			anonymous = anonymous ? 0 : 1;

			if(anonymous) {

			    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), FALSE);
			    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), FALSE);
			    EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME),       FALSE);
			    EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD),       FALSE);
			}
			else {

			    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_USERNAME), TRUE);
			    EnableWindow(GetDlgItem(hDlg, IDC_STATIC_FTP_PASSWORD), TRUE);
			    EnableWindow(GetDlgItem(hDlg, IDC_EDIT_USERNAME),       TRUE);
			    EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PASSWORD),       TRUE);
			}

			break;

		case IDB_URL_OK:
			
			EndDialog(hDlg, TRUE);

			RECT rect;

			GetClientRect(hwnd, &rect);
			InvalidateRect(hwnd, &rect, TRUE); 
			UpdateWindow(hwnd);

			openOK = FALSE;

			if(SendMessage(GetDlgItem(hDlg, IDC_RADIO_HTTP), BM_GETCHECK, 0, 0) == BST_CHECKED) {

				SHORT lineLength;


				lineLength = (short) SendMessage(GetDlgItem(hDlg, IDC_EDIT_HTTP), EM_LINELENGTH, 0, 0);

				/*
				 * 将url缓冲写入头两个字节
				 * 
				 */

				url = (char *) new char[lineLength + 1];
				memcpy(url, &lineLength, 2);

				SendMessage(GetDlgItem(hDlg, IDC_EDIT_HTTP), EM_GETLINE, 0, (LONG)(LPVOID)url);
				url[lineLength] = '\0';

				if(strstr(url, "http://") != NULL || strstr(url, "HTTP://") != NULL) {

					openOK = TRUE;
					return 0;
				}
			}
			else {

				SHORT lineLength;


				lineLength = (short) SendMessage(GetDlgItem(hDlg, IDC_RADIO_HTTP), EM_LINELENGTH, 0, 0);

				/*
				 * 将url缓冲写入头两个字节
				 *
				 */

				url = (char *) new char[lineLength + 1];
				memcpy(url, &lineLength, 2);

				SendMessage(GetDlgItem(hDlg, IDC_EDIT_HTTP), EM_GETLINE, 0, (LONG)(LPVOID)url);
				url[lineLength] = '\0';

				if(strstr(url, "ftp://") != NULL || strstr(url, "FTP://") != NULL) {

					if(anonymous) {
						
						openOK = TRUE;
						return 0;
					}
					else {


					}
				}
			}
			  
			return TRUE;
			break;

		case IDB_URL_CANCEL:
			
			EndDialog(hDlg, TRUE);
			return TRUE;
			break;

		default:
		  return 0;
		}
		break;
	}

  return FALSE;
}

/**************************************************************************************
 *                                                                                    *
 *                                      清除                                          *
 *                                    -------                                         *
 **************************************************************************************/

void Cleanup()
{
	DWORD i;

	for(i=0; i < 5; i++) {
		
		if(RecentFiles[i] != NULL) {

			free(RecentFiles[i]);
		}
	}

	DestroyMenu(popupMenu);
	CoUninitialize();

	delete playback;
	delete skinList;
	delete resizer;
}

/**************************************************************************************
 *                                                                                    *
 * - ParseCmdLine():                                                                  *
 *                                                                                    *
 *   ———分析命令行和重载选项                                                             *
 *                                                                                    *
 **************************************************************************************/

void ParseCmdLine(char *lpszCmdParam)
{
	char *token;
	char *arg1;

	token = lpszCmdParam;

	while(*token != '\0' && (*token == ' ' || *token == '\t'))
		token++;

	while(*token != '\0') {

		if(*token == '/') {

			token++;
			if(*token == 'f') {

				options.startFullscreen = 1;
				token++;
			}

			continue;
		}

		if(*token == '"') {

			arg1 = ++token;

			while(*token != '\0' && *token != '"') {

				token++;
			}

			*token++ = '\0';

			playlist->AddItem(arg1);
		}

		token++;
	}
}

/**************************************************************************************
 *                                                                                    *
 * - ReBuildRecentFilesMenu():                                                        *
 *                                                                                    *
 *   ———分析命令行和重载选项                                                       *
 *                                                                                    *
 **************************************************************************************/

void ReBuildRecentFilesMenu()
{
   HMENU             menu;
   MENUITEMINFO      itemInfo;
   DWORD             i,count;
   char              buffer[MAX_PATH + 4];

   menu = GetSubMenu(popupMenu, 0);
   menu = GetSubMenu(menu, 5);

   if(RecentFiles[0] != NULL) {

	   count = GetMenuItemCount(menu);

	   for(i=0; i<count; i++)
		   RemoveMenu(menu, 0, MF_BYPOSITION);
   
	   /*
		 * 加入文件
		 */
   
	   for(i=0; i < 5; i++) {
	   
		   if(RecentFiles[i] != NULL) {

				sprintf(buffer, "%d - ", i+1);
				strcat(buffer, RecentFiles[i]);

			   itemInfo.cbSize = sizeof(MENUITEMINFO);
			   itemInfo.fMask  = MIIM_DATA | MIIM_TYPE | MIIM_ID;

⌨️ 快捷键说明

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