Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.2 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved.
  3. //
  4. // MODULE: mbcallbk.cpp
  5. //
  6. // PURPOSE: Implements the sizable coolbar window.
  7. //
  8. #include "pch.hxx"
  9. #include "mbcallbk.h"
  10. CMenuCallback::CMenuCallback() : m_cRef(1)
  11. {
  12. }
  13. CMenuCallback::~CMenuCallback()
  14. {
  15. //ASSERT(_punkSite == NULL);
  16. }
  17. STDMETHODIMP_(ULONG) CMenuCallback::AddRef ()
  18. {
  19. return ++m_cRef;
  20. }
  21. /*----------------------------------------------------------
  22. Purpose: IUnknown::Release method
  23. */
  24. STDMETHODIMP_(ULONG) CMenuCallback::Release()
  25. {
  26. // ASSERT(m_cRef > 0);
  27. m_cRef--;
  28. if( m_cRef > 0)
  29. return m_cRef;
  30. delete this;
  31. return 0;
  32. }
  33. /*----------------------------------------------------------
  34. Purpose: IUnknown::QueryInterface method
  35. */
  36. STDMETHODIMP CMenuCallback::QueryInterface (REFIID riid, LPVOID * ppvObj)
  37. {
  38. if (IsEqualIID(riid, IID_IObjectWithSite))
  39. {
  40. *ppvObj = (IObjectWithSite*)this;
  41. m_cRef++;
  42. DOUTL(2, TEXT("CMenuCallback::QI(IID_IObjectWithSite) called. _cRef=%d"), m_cRef);
  43. return S_OK;
  44. }
  45. else if (IsEqualIID(riid, IID_IShellMenuCallback))
  46. {
  47. *ppvObj = (IShellMenuCallback*)this;
  48. m_cRef++;
  49. DOUTL(2, TEXT("CMenuCallback::QI(IID_IShellCallback) called. _cRef=%d"), m_cRef);
  50. return S_OK;
  51. }
  52. *ppvObj = NULL;
  53. return E_NOINTERFACE;
  54. }
  55. STDMETHODIMP CMenuCallback::CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  56. {
  57. HRESULT hres = S_FALSE;
  58. switch (uMsg)
  59. {
  60. case SMC_GETINFO:
  61. {
  62. SMINFO *psmInfo = (SMINFO*)lParam;
  63. if (psmInfo->dwMask & SMIM_FLAGS)
  64. {
  65. psmInfo->dwFlags |= SMIF_TRACKPOPUP;
  66. hres = S_OK;
  67. }
  68. break;
  69. }
  70. default:
  71. hres = S_FALSE;
  72. }
  73. return hres;
  74. }
  75. STDMETHODIMP CMenuCallback::SetSite(IUnknown* punk)
  76. {
  77. _pUnkSite = punk;
  78. return S_OK;
  79. }
  80. STDMETHODIMP CMenuCallback::GetSite(REFIID riid, void** ppvsite)
  81. {
  82. return E_NOTIMPL;
  83. }