ShellDetails.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:2k
源码类别:

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. #include "stdafx.h"
  18. #include "ShellDetails.h"
  19. HRESULT CShellDetails::GetDetailsOf(LPCITEMIDLIST pidl,UINT iColumn,LPSHELLDETAILS pDetail)
  20. {
  21. HRESULT hr=E_FAIL;
  22. if (m_pUnk == NULL)
  23. return hr;
  24. IShellFolder2 *pShellFolder2=NULL;
  25. hr = m_pUnk->QueryInterface(IID_IShellFolder2,(LPVOID*)&pShellFolder2);
  26. if (SUCCEEDED(hr))
  27. {
  28. hr = pShellFolder2->GetDetailsOf(pidl,iColumn,pDetail);
  29. pShellFolder2->Release();
  30. }
  31. else 
  32. {
  33. IShellDetails *pShellDetails=NULL;
  34. hr = m_pUnk->QueryInterface(IID_IShellDetails,(LPVOID*)&pShellDetails);
  35. if (SUCCEEDED(hr))
  36. {
  37. hr = pShellDetails->GetDetailsOf(pidl,iColumn,pDetail);
  38. pShellDetails->Release();
  39. }
  40. }
  41. return hr;
  42. }
  43. bool CShellDetails::IsValidDetails()
  44. {
  45. return m_pUnk != NULL;
  46. }
  47. void CShellDetails::SetShellDetails(IUnknown *pUnk)
  48. {
  49. FreeInterfaces();
  50. if (pUnk)
  51. {
  52. m_pUnk = pUnk;
  53. m_pUnk->AddRef();
  54. }
  55. }
  56. CShellDetails::CShellDetails(const CShellDetails &rOther)
  57.  :  m_pUnk(rOther.m_pUnk)
  58. {
  59. m_pUnk->AddRef();
  60. }
  61. const CShellDetails &CShellDetails::operator=(const CShellDetails &rOther)
  62. {
  63. if (this == &rOther)
  64. return *this;
  65. FreeInterfaces();
  66. m_pUnk = rOther.m_pUnk;
  67. m_pUnk->AddRef();
  68. return *this;
  69. }
  70. void CShellDetails::FreeInterfaces()
  71. {
  72. if (m_pUnk)
  73. {
  74. m_pUnk->Release();
  75. m_pUnk = NULL;
  76. }
  77. }
  78. CShellDetails::CShellDetails()
  79. {
  80. m_pUnk = NULL;
  81. }
  82. CShellDetails::~CShellDetails()
  83. {
  84. FreeInterfaces();
  85. }