home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / addins / cmdwnd / msdevcmd / commandwindow.cpp < prev    next >
C/C++ Source or Header  |  1998-04-02  |  2KB  |  114 lines

  1. // CommandWindow.cpp : Implementation of CCommandWindow
  2. #include "stdafx.h"
  3. #include "Msdevcmd.h"
  4. #include "CommandWindow.h"
  5.  
  6. #include <ObjModel\addguid.h>
  7. #include <ObjModel\appguid.h>
  8. #include <ObjModel\bldguid.h>
  9. #include <ObjModel\textguid.h>
  10. #include <ObjModel\dbgguid.h>
  11.  
  12. extern CMsdevcmdApp theApp;
  13.  
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CCommandWindow
  17.  
  18. STDMETHODIMP CCommandWindow::InterfaceSupportsErrorInfo(REFIID riid)
  19. {
  20.     static const IID* arr[] = 
  21.     {
  22.         &IID_ICommandWindow,
  23.     };
  24.     for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
  25.     {
  26.         if (InlineIsEqualGUID(*arr[i],riid))
  27.             return S_OK;
  28.     }
  29.     return S_FALSE;
  30. }
  31.  
  32.  
  33.  
  34. STDMETHODIMP CCommandWindow::DoFireClose()
  35. {
  36.     AFX_MANAGE_STATE(AfxGetStaticModuleState())
  37.  
  38.     Fire_OnClose();
  39.  
  40.     return S_OK;
  41. }
  42.  
  43. HRESULT CCommandWindow::FindApp()
  44. {
  45.     HRESULT hr;
  46.     CLSID clsid;
  47.     CComPtr<IUnknown> pUnk;
  48.  
  49.     hr = CLSIDFromProgID(OLESTR("MSDEV.APPLICATION"), &clsid);
  50.     if (SUCCEEDED(hr)) 
  51.     {
  52.         hr = GetActiveObject(clsid, NULL,  &pUnk  );
  53.         if (SUCCEEDED(hr))
  54.         {
  55.             hr = pUnk->QueryInterface(IID_IApplication, (LPVOID *)&m_spApplication);
  56.         }
  57.         else
  58.         {
  59.             hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IApplication, (LPVOID *)&m_spApplication);
  60.             m_spApplication->put_Visible(VARIANT_TRUE);
  61.         }
  62.     }
  63.     return(hr);
  64. }
  65.  
  66. STDMETHODIMP CCommandWindow::Open(IDispatch *pDispApplication)
  67. {
  68.     AFX_MANAGE_STATE(AfxGetStaticModuleState())
  69.  
  70.     HRESULT hr = S_OK;
  71.     CComQIPtr<IApplication, &IID_IApplication> pApp;
  72.     pApp = pDispApplication;
  73.     m_spApplication = pApp;
  74.     theApp.SetCommandWindow(this);
  75.  
  76.     return S_OK;
  77. }
  78.  
  79. STDMETHODIMP CCommandWindow::DoClose()
  80. {
  81.     AFX_MANAGE_STATE(AfxGetStaticModuleState())
  82.     HRESULT hr = S_OK;
  83.     m_spApplication.Release();
  84.     m_spApplication = NULL;
  85.  
  86.  
  87.     return S_OK;
  88. }
  89.  
  90. IApplication * CCommandWindow::GetApp()
  91. {
  92.     if (m_spApplication == NULL)
  93.     {
  94.         FindApp();
  95.     }
  96.     return(m_spApplication);
  97. }
  98.  
  99. STDMETHODIMP CCommandWindow::SetFocus()
  100. {
  101.     AFX_MANAGE_STATE(AfxGetStaticModuleState())
  102.     CWnd *pWndMain;
  103.     HWND hwnd;
  104.  
  105.     pWndMain = theApp.GetMainWnd();
  106.     hwnd = pWndMain->GetSafeHwnd();
  107.     _ASSERTE(hwnd);
  108.     if (hwnd)
  109.     {
  110.         SetForegroundWindow(hwnd);
  111.     }
  112.     return S_OK;
  113. }
  114.