PPageFileInfoRes.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. // PPageFileInfoRes.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "PPageFileInfoRes.h"
  26. #include ".ppagefileinfores.h"
  27. // CPPageFileInfoRes dialog
  28. IMPLEMENT_DYNAMIC(CPPageFileInfoRes, CPPageBase)
  29. CPPageFileInfoRes::CPPageFileInfoRes(CString fn, IFilterGraph* pFG)
  30. : CPPageBase(CPPageFileInfoRes::IDD, CPPageFileInfoRes::IDD)
  31. , m_fn(fn)
  32. , m_hIcon(NULL)
  33. , m_pFG(pFG)
  34. {
  35. }
  36. CPPageFileInfoRes::~CPPageFileInfoRes()
  37. {
  38. if(m_hIcon) DestroyIcon(m_hIcon);
  39. }
  40. void CPPageFileInfoRes::DoDataExchange(CDataExchange* pDX)
  41. {
  42. __super::DoDataExchange(pDX);
  43. DDX_Control(pDX, IDC_DEFAULTICON, m_icon);
  44. DDX_Text(pDX, IDC_EDIT1, m_fn);
  45. DDX_Control(pDX, IDC_LIST1, m_list);
  46. }
  47. BEGIN_MESSAGE_MAP(CPPageFileInfoRes, CPPageBase)
  48. ON_BN_CLICKED(IDC_BUTTON1, OnSaveAs)
  49. ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateSaveAs)
  50. ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnNMDblclkList1)
  51. END_MESSAGE_MAP()
  52. // CPPageFileInfoRes message handlers
  53. BOOL CPPageFileInfoRes::OnInitDialog()
  54. {
  55. __super::OnInitDialog();
  56. if(m_hIcon = LoadIcon(m_fn, false))
  57. m_icon.SetIcon(m_hIcon);
  58. m_fn.TrimRight('/');
  59. int i = max(m_fn.ReverseFind('\'), m_fn.ReverseFind('/'));
  60. if(i >= 0 && i < m_fn.GetLength()-1)
  61. m_fn = m_fn.Mid(i+1);
  62. m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
  63. m_list.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 187);
  64. m_list.InsertColumn(1, _T("Mime Type"), LVCFMT_LEFT, 127);
  65. BeginEnumFilters(m_pFG, pEF, pBF)
  66. {
  67. if(CComQIPtr<IDSMResourceBag> pRB = pBF)
  68. if(pRB && pRB->ResGetCount() > 0)
  69. {
  70. for(DWORD i = 0; i < pRB->ResGetCount(); i++)
  71. {
  72. CComBSTR name, desc, mime;
  73. BYTE* pData = NULL;
  74. DWORD len = 0;
  75. if(SUCCEEDED(pRB->ResGet(i, &name, &desc, &mime, &pData, &len, NULL)))
  76. {
  77. CDSMResource r;
  78. r.name = name;
  79. r.desc = desc;
  80. r.mime = mime;
  81. r.data.SetCount(len);
  82. memcpy(r.data.GetData(), pData, r.data.GetCount());
  83. CoTaskMemFree(pData);
  84. POSITION pos = m_res.AddTail(r);
  85. int iItem = m_list.InsertItem(m_list.GetItemCount(), CString(name));
  86. m_list.SetItemText(iItem, 1, CString(mime));
  87. m_list.SetItemData(iItem, (DWORD_PTR)pos);
  88. }
  89. }
  90. }
  91. }
  92. EndEnumFilters
  93. UpdateData(FALSE);
  94. return TRUE;  // return TRUE unless you set the focus to a control
  95. // EXCEPTION: OCX Property Pages should return FALSE
  96. }
  97. void CPPageFileInfoRes::OnSaveAs()
  98. {
  99. int i = m_list.GetSelectionMark();
  100. if(i < 0) return;
  101. CDSMResource& r = m_res.GetAt((POSITION)m_list.GetItemData(i));
  102. CFileDialog fd(FALSE, NULL, CString(r.name), 
  103. OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
  104. _T("All files|*.*||"), this, 0);
  105. if(fd.DoModal() == IDOK)
  106. {
  107. if(FILE* f = _tfopen(fd.GetPathName(), _T("wb")))
  108. {
  109. fwrite(r.data.GetData(), 1, r.data.GetCount(), f);
  110. fclose(f);
  111. }
  112. }
  113. }
  114. void CPPageFileInfoRes::OnUpdateSaveAs(CCmdUI* pCmdUI)
  115. {
  116. pCmdUI->Enable(m_list.GetSelectedCount());
  117. }
  118. void CPPageFileInfoRes::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
  119. {
  120. int i = m_list.GetSelectionMark();
  121. if(i < 0) return;
  122. CDSMResource& r = m_res.GetAt((POSITION)m_list.GetItemData(i));
  123. CString url;
  124. url.Format(_T("http://localhost:%d/convres.html?id=%x"), AfxGetAppSettings().nWebServerPort, (DWORD)&r);
  125. ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWDEFAULT);
  126. *pResult = 0;
  127. }