MediaTypesDlg.cpp
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:4k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. // MediaTypesDlg.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "MediaTypesDlg.h"
  26. #include "....DSUtilDSUtil.h"
  27. #include "......includemoreuuids.h"
  28. // CMediaTypesDlg dialog
  29. //IMPLEMENT_DYNAMIC(CMediaTypesDlg, CResizableDialog)
  30. CMediaTypesDlg::CMediaTypesDlg(IGraphBuilderDeadEnd* pGBDE, CWnd* pParent /*=NULL*/)
  31. : CResizableDialog(CMediaTypesDlg::IDD, pParent)
  32. , m_pGBDE(pGBDE)
  33. {
  34. m_subtype = GUID_NULL;
  35. m_type = UNKNOWN;
  36. }
  37. CMediaTypesDlg::~CMediaTypesDlg()
  38. {
  39. }
  40. void CMediaTypesDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CResizableDialog::DoDataExchange(pDX);
  43. DDX_Control(pDX, IDC_COMBO1, m_pins);
  44. DDX_Control(pDX, IDC_EDIT1, m_report);
  45. }
  46. void CMediaTypesDlg::AddLine(CString str)
  47. {
  48. str.Replace(_T("n"), _T("rn"));
  49. int len = m_report.GetWindowTextLength();
  50. m_report.SetSel(len, len, TRUE);
  51. m_report.ReplaceSel(str);
  52. }
  53. void CMediaTypesDlg::AddMediaType(AM_MEDIA_TYPE* pmt)
  54. {
  55. m_subtype = pmt->subtype;
  56. if(pmt->majortype == MEDIATYPE_Video) m_type = VIDEO;
  57. else if(pmt->majortype == MEDIATYPE_Audio) m_type = AUDIO;
  58. else m_type = UNKNOWN;
  59. CAtlList<CString> sl;
  60. CMediaTypeEx(*pmt).Dump(sl);
  61. POSITION pos = sl.GetHeadPosition();
  62. while(pos) AddLine(sl.GetNext(pos) + 'n');
  63. }
  64. BEGIN_MESSAGE_MAP(CMediaTypesDlg, CResizableDialog)
  65. ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
  66. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  67. ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton1)
  68. END_MESSAGE_MAP()
  69. // CMediaTypesDlg message handlers
  70. BOOL CMediaTypesDlg::OnInitDialog()
  71. {
  72. __super::OnInitDialog();
  73. CAtlList<CStringW> path;
  74. CAtlList<CMediaType> mts;
  75. for(int i = 0; S_OK == m_pGBDE->GetDeadEnd(i, path, mts); i++)
  76. {
  77. if(!path.GetCount()) continue;
  78. m_pins.SetItemData(m_pins.AddString(CString(path.GetTail())), (DWORD_PTR)i);
  79. }
  80. m_pins.SetCurSel(0);
  81. OnCbnSelchangeCombo1();
  82. AddAnchor(IDC_STATIC1, TOP_LEFT, TOP_RIGHT);
  83. AddAnchor(IDC_STATIC2, TOP_LEFT, TOP_RIGHT);
  84. AddAnchor(IDC_COMBO1, TOP_LEFT, TOP_RIGHT);
  85. AddAnchor(IDC_EDIT1, TOP_LEFT, BOTTOM_RIGHT);
  86. AddAnchor(IDC_BUTTON1, BOTTOM_LEFT);
  87. AddAnchor(IDOK, BOTTOM_RIGHT);
  88. SetMinTrackSize(CSize(300, 200));
  89. return TRUE;  // return TRUE unless you set the focus to a control
  90. // EXCEPTION: OCX Property Pages should return FALSE
  91. }
  92. void CMediaTypesDlg::OnCbnSelchangeCombo1()
  93. {
  94. m_report.SetWindowText(_T(""));
  95. int i = m_pins.GetCurSel();
  96. if(i < 0) return;
  97. CAtlList<CStringW> path;
  98. CAtlList<CMediaType> mts;
  99. if(FAILED(m_pGBDE->GetDeadEnd(i, path, mts)) || !path.GetCount()) 
  100. return;
  101. POSITION pos = path.GetHeadPosition();
  102. while(pos)
  103. {
  104. AddLine(CString(path.GetNext(pos)) + _T("n"));
  105. if(!pos) AddLine(_T("n"));
  106. }
  107. pos = mts.GetHeadPosition();
  108. for(int j = 0; pos; j++)
  109. {
  110. CString str;
  111. str.Format(_T("Media Type %d:n"), j);
  112. AddLine(str);
  113. AddLine(_T("--------------------------n"));
  114. AddMediaType(&mts.GetNext(pos));
  115. AddLine();
  116. }
  117. m_report.SetSel(0, 0);
  118. }
  119. void CMediaTypesDlg::OnBnClickedButton1()
  120. {
  121. if(m_subtype.Data2 == 0x0000 && m_subtype.Data3 == 0x0010
  122. && *(unsigned __int64*)m_subtype.Data4 == 0x719b3800aa000080i64)
  123. {
  124. BYTE* p = (BYTE*)&m_subtype.Data1;
  125. for(int i = 0; i < 4; i++, p++)
  126. if(*p >= 'a' && *p <= 'z') *p -= 0x20;
  127. }
  128. CString str;
  129. str.Format(_T("http://gabest.org/codec.php?type=%d&guid=%s"), m_type, CStringFromGUID(m_subtype));
  130. ShellExecute(NULL, _T("open"), str, NULL, NULL, SW_SHOW);
  131. }
  132. void CMediaTypesDlg::OnUpdateButton1(CCmdUI* pCmdUI)
  133. {
  134. pCmdUI->Enable(m_subtype != GUID_NULL);
  135. }