command.cpp
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 3k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /*----------------------------------------------------------------------------
  2. / Title;
  3. /   command.cpp
  4. /
  5. / Authors;
  6. /   Rick Turner (ricktu)
  7. /
  8. / Notes;
  9. /   Implements IOleCommandTarget for My Documents code.
  10. /----------------------------------------------------------------------------*/
  11. #include "precomp.hxx"
  12. #pragma hdrstop
  13. /*-----------------------------------------------------------------------------
  14. / CMyDocsCommand
  15. /   This is the My Documents IOleCommandTarget implementation.
  16. /----------------------------------------------------------------------------*/
  17. CMyDocsCommand::CMyDocsCommand( )
  18. {
  19.     TraceEnter(TRACE_COMMAND, "CMyDocsCommand::CMyDocsCommand");
  20.     TraceLeave();
  21. }
  22. CMyDocsCommand::~CMyDocsCommand()
  23. {
  24.     TraceEnter(TRACE_COMMAND, "CMyDocsCommand::~CMyDocsCommand");
  25.     TraceLeave();
  26. }
  27. #undef CLASS_NAME
  28. #define CLASS_NAME CMyDocsCommand
  29. #include "unknown.inc"
  30. STDMETHODIMP
  31. CMyDocsCommand::QueryInterface(REFIID riid, LPVOID* ppvObject)
  32. {
  33.     INTERFACES iface[] =
  34.     {
  35.         &IID_IOleCommandTarget, (IOleCommandTarget *)this,
  36.     };
  37.     return HandleQueryInterface(riid, ppvObject, iface, ARRAYSIZE(iface));
  38. }
  39. /*-----------------------------------------------------------------------------
  40. / IOleCommandTarget
  41. /----------------------------------------------------------------------------*/
  42. STDMETHODIMP
  43. CMyDocsCommand::QueryStatus( const GUID *pguidCmdGroup,
  44.                              ULONG cCmds,
  45.                              OLECMD prgCmds[],
  46.                              OLECMDTEXT *pCmdText
  47.                             )
  48. {
  49.     HRESULT hr = OLECMDERR_E_UNKNOWNGROUP;
  50.     TraceEnter(TRACE_COMMAND, "CMyDocsCommand::QueryStatus");
  51.     if (IsEqualGUID(*pguidCmdGroup, CGID_ShellServiceObject))
  52.     {
  53.         // We like Shell Service Object notifications...
  54.         hr = S_OK;
  55.     }
  56.     TraceLeaveResult(hr);
  57. }
  58. /*---------------------------------------------------------------------------*/
  59. STDMETHODIMP
  60. CMyDocsCommand::Exec( const GUID *pguidCmdGroup,
  61.                       DWORD nCmdID,
  62.                       DWORD nCmdexecopt,
  63.                       VARIANTARG *pvaIn,
  64.                       VARIANTARG *pvaOut
  65.                      )
  66. {
  67.     HRESULT hr = E_NOTIMPL;
  68.     TraceEnter(TRACE_COMMAND, "CMyDocsCommand::Exec");
  69.     if (IsEqualGUID(*pguidCmdGroup, CGID_ShellServiceObject))
  70.     {
  71.         // Handle Shell Service Object notifications here.
  72.         switch (nCmdID)
  73.         {
  74.             case SSOCMDID_OPEN:
  75.                 Trace(TEXT("Called w/OPEN"));
  76.                 hr = _CheckPerUserSettings();
  77.                 break;
  78.             case SSOCMDID_CLOSE:
  79.                 Trace(TEXT("Called w/CLOSE"));
  80.                 hr = _RemovePerUserSettings();
  81.                 break;
  82.             default:
  83.                 hr = S_OK;
  84.                 break;
  85.         }
  86.     }
  87.     TraceLeaveResult( hr );
  88. }