EnumFilterDlg.cpp
上传用户:sztlpcb
上传日期:2007-06-09
资源大小:741k
文件大小:4k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // EnumFilterDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ccd.h"
  5. #include "EnumFilterDlg.h"
  6. #include <dshow.h>
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CEnumFilterDlg dialog
  14. CEnumFilterDlg::CEnumFilterDlg(CWnd* pParent /*=NULL*/)
  15. : CDialog(CEnumFilterDlg::IDD, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CEnumFilterDlg)
  18. // NOTE: the ClassWizard will add member initialization here
  19. //}}AFX_DATA_INIT
  20. }
  21. void CEnumFilterDlg::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CDialog::DoDataExchange(pDX);
  24. //{{AFX_DATA_MAP(CEnumFilterDlg)
  25. DDX_Control(pDX, IDC_TREE, m_TreeCtrl);
  26. //}}AFX_DATA_MAP
  27. }
  28. BEGIN_MESSAGE_MAP(CEnumFilterDlg, CDialog)
  29. //{{AFX_MSG_MAP(CEnumFilterDlg)
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CEnumFilterDlg message handlers
  34. // Purpose:Enum Filters
  35. //
  36. // Param: None
  37. //
  38. // ret: None
  39. //
  40. // Create List : LaiLee 2001/10
  41. // Modify List :
  42. BOOL CEnumFilterDlg::OnInitDialog() 
  43. {
  44. CDialog::OnInitDialog();
  45. // TODO: Add extra initialization here
  46. // TODO: Add extra initialization here
  47. CoInitialize(NULL);
  48. static char *lpszCat[]={_T("CLSID_AudioInputDeviceCategory"),
  49. _T("CLSID_AudioCompressorCategory"),
  50. _T("CLSID_AudioRendererCategory"),
  51. _T("CLSID_LegacyAmFilterCategory"),
  52. _T("CLSID_MidiRendererCategory"),
  53. _T("CLSID_VideoInputDeviceCategory"),
  54. _T("CLSID_VideoCompressorCategory"),
  55. _T("CLSID_ActiveMovieCategories")};
  56. static char szBuf[128];
  57. ICreateDevEnum *pSysDevEnum = NULL;
  58. IEnumMoniker *pEnumCat = NULL;
  59. IMoniker *pMoniker;
  60. ULONG cFetched;
  61.     IPropertyBag *pPropBag;
  62.     VARIANT varName;
  63. TV_INSERTSTRUCT tv;
  64. HTREEITEM htItem;
  65. for(int nC1=0;nC1<8;nC1++)
  66. {
  67. tv.hParent=NULL;
  68. tv.hInsertAfter=TVI_LAST;
  69. tv.item.mask=TVIF_TEXT;
  70. tv.item.pszText = lpszCat[nC1];
  71. htItem=this->m_TreeCtrl.InsertItem(&tv);
  72. CoCreateInstance(CLSID_SystemDeviceEnum, 
  73.     NULL, CLSCTX_INPROC, IID_ICreateDevEnum, 
  74.     (void **)&pSysDevEnum);
  75. switch(nC1)
  76. {
  77. case 0:
  78. pSysDevEnum->CreateClassEnumerator(CLSID_AudioInputDeviceCategory, &pEnumCat, 0);
  79. break;
  80. case 1:
  81. pSysDevEnum->CreateClassEnumerator(CLSID_AudioCompressorCategory, &pEnumCat, 0);
  82. break;
  83. case 2:
  84. pSysDevEnum->CreateClassEnumerator(CLSID_AudioRendererCategory, &pEnumCat, 0);
  85. break;
  86. case 3:
  87. pSysDevEnum->CreateClassEnumerator(CLSID_LegacyAmFilterCategory, &pEnumCat, 0);
  88. break;
  89. case 4:
  90. pSysDevEnum->CreateClassEnumerator(CLSID_MidiRendererCategory, &pEnumCat, 0);
  91. break;
  92. case 5:
  93. pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0);
  94. break;
  95. case 6:
  96. pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnumCat, 0);
  97. break;
  98. case 7:
  99. pSysDevEnum->CreateClassEnumerator(CLSID_ActiveMovieCategories, &pEnumCat, 0);
  100. break;
  101. default:
  102. break;
  103. }
  104. if(pEnumCat!=NULL)
  105. {
  106. while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
  107. {
  108. pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
  109. // Retreive Filter's Name
  110. varName.vt = VT_BSTR;
  111. pPropBag->Read(L"FriendlyName", &varName, 0);
  112. tv.hParent=htItem;
  113. tv.hInsertAfter=TVI_LAST;
  114. tv.item.mask=TVIF_TEXT;
  115. ::wcstombs(szBuf,varName.bstrVal,128);
  116. tv.item.pszText =szBuf;
  117. //Insert Filter Info to TreeControl
  118. this->m_TreeCtrl.InsertItem(&tv);
  119. SysFreeString(varName.bstrVal);
  120. pPropBag->Release();
  121.     pMoniker->Release();
  122. }
  123. pEnumCat->Release();
  124. }
  125. pSysDevEnum->Release();
  126. }
  127. return TRUE;  
  128.               
  129. }