IIPOBJ.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * IIPOBJ.CPP
  3.  * Polyline Component Chapter 24
  4.  *
  5.  * IOleInPlaceObject interface implementation for Polyline
  6.  *
  7.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Microsoft
  10.  * Internet  :  kraigb@microsoft.com
  11.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  12.  */
  13. #include "polyline.h"
  14. /*
  15.  * CImpIOleInPlaceObject::CImpIOleInPlaceObject
  16.  * CImpIOleInPlaceObject::~CImpIOleInPlaceObject
  17.  *
  18.  * Parameters (Constructor):
  19.  *  pObj            PCPolyline of the object we're in.
  20.  *  pUnkOuter       LPUNKNOWN to which we delegate.
  21.  */
  22. CImpIOleInPlaceObject::CImpIOleInPlaceObject(PCPolyline pObj
  23.     , LPUNKNOWN pUnkOuter)
  24.     {
  25.     m_cRef=0;
  26.     m_pObj=pObj;
  27.     m_pUnkOuter=pUnkOuter;
  28.     return;
  29.     }
  30. CImpIOleInPlaceObject::~CImpIOleInPlaceObject(void)
  31.     {
  32.     return;
  33.     }
  34. /*
  35.  * CImpIOleInPlaceObject::QueryInterface
  36.  * CImpIOleInPlaceObject::AddRef
  37.  * CImpIOleInPlaceObject::Release
  38.  *
  39.  * Purpose:
  40.  *  IUnknown members for CImpIOleInPlaceObject object.
  41.  */
  42. STDMETHODIMP CImpIOleInPlaceObject::QueryInterface(REFIID riid
  43.     , PPVOID ppv)
  44.     {
  45.     return m_pUnkOuter->QueryInterface(riid, ppv);
  46.     }
  47. STDMETHODIMP_(ULONG) CImpIOleInPlaceObject::AddRef(void)
  48.     {
  49.     ++m_cRef;
  50.     return m_pUnkOuter->AddRef();
  51.     }
  52. STDMETHODIMP_(ULONG) CImpIOleInPlaceObject::Release(void)
  53.     {
  54.     --m_cRef;
  55.     return m_pUnkOuter->Release();
  56.     }
  57. /*
  58.  * CImpIOleInPlaceObject::GetWindow
  59.  *
  60.  * Purpose:
  61.  *  Retrieves the handle of the window associated with the object
  62.  *  on which this interface is implemented.
  63.  *
  64.  * Parameters:
  65.  *  phWnd           HWND * in which to store the window handle.
  66.  *
  67.  * Return Value:
  68.  *  HRESULT         NOERROR if successful, E_FAIL if there is no
  69.  *                  window.
  70.  */
  71. STDMETHODIMP CImpIOleInPlaceObject::GetWindow(HWND *phWnd)
  72.     {
  73.     if (NULL!=m_pObj->m_pHW)
  74.         *phWnd=m_pObj->m_pHW->Window();
  75.     else
  76.         *phWnd=m_pObj->m_hWnd;
  77.     return NOERROR;
  78.     }
  79. /*
  80.  * CImpIOleInPlaceObject::ContextSensitiveHelp
  81.  *
  82.  * Purpose:
  83.  *  Instructs the object on which this interface is implemented to
  84.  *  enter or leave a context-sensitive help mode.
  85.  *
  86.  * Parameters:
  87.  *  fEnterMode      BOOL TRUE to enter the mode, FALSE otherwise.
  88.  *
  89.  * Return Value:
  90.  *  HRESULT         NOERROR or an error code
  91.  */
  92. STDMETHODIMP CImpIOleInPlaceObject::ContextSensitiveHelp
  93.     (BOOL fEnterMode)
  94.     {
  95.     return ResultFromScode(E_NOTIMPL);
  96.     }
  97. /*
  98.  * CImpIOleInPlaceObject::InPlaceDeactivate
  99.  *
  100.  * Purpose:
  101.  *  Instructs the object to deactivate itself from an in-place state
  102.  *  and to discard any Undo state.
  103.  *
  104.  * Parameters:
  105.  *  None
  106.  *
  107.  * Return Value:
  108.  *  HRESULT         NOERROR or an error code
  109.  */
  110. STDMETHODIMP CImpIOleInPlaceObject::InPlaceDeactivate(void)
  111.     {
  112.     m_pObj->InPlaceDeactivate();
  113.     return NOERROR;
  114.     }
  115. /*
  116.  * CImpIOleInPlaceObject::UIDeactivate
  117.  *
  118.  * Purpose:
  119.  *  Instructs the object to just remove any in-place user interface
  120.  *  but to do no other deactivation.  The object should just hide
  121.  *  the UI components but not destroy them until InPlaceDeactivate
  122.  *  is called.
  123.  *
  124.  * Parameters:
  125.  *  None
  126.  *
  127.  * Return Value:
  128.  *  HRESULT         NOERROR or an error code
  129.  */
  130. STDMETHODIMP CImpIOleInPlaceObject::UIDeactivate(void)
  131.     {
  132.     m_pObj->UIDeactivate();
  133.     return NOERROR;
  134.     }
  135. /*
  136.  * CImpIOleInPlaceObject::SetObjectRects
  137.  *
  138.  * Purpose:
  139.  *  Provides the object with rectangles describing the position of
  140.  *  the object in the container window as well as its visible area.
  141.  *
  142.  * Parameters:
  143.  *  prcPos          LPCRECT providing the object's full rectangle
  144.  *                  relative to the continer's document.  The object
  145.  *                  should scale to this rectangle.
  146.  *  prcClip         LPCRECT describing the visible area of the object
  147.  *                  which should not draw outside these areas.
  148.  *
  149.  * Return Value:
  150.  *  HRESULT         NOERROR or an error code
  151.  */
  152. STDMETHODIMP CImpIOleInPlaceObject::SetObjectRects(LPCRECT prcPos
  153.     , LPCRECT prcClip)
  154.     {
  155.     if (NULL!=m_pObj->m_pHW)
  156.         m_pObj->m_pHW->RectsSet((LPRECT)prcPos, (LPRECT)prcClip);
  157.     return NOERROR;
  158.     }
  159. /*
  160.  * CImpIOleInPlaceObject::ReactivateAndUndo
  161.  *
  162.  * Purpose:
  163.  *  Instructs the object to reactivate itself in-place and perform
  164.  *  whatever Undo means for it.
  165.  *
  166.  * Parameters:
  167.  *  None
  168.  *
  169.  * Return Value:
  170.  *  HRESULT         NOERROR or an error code
  171.  */
  172. STDMETHODIMP CImpIOleInPlaceObject::ReactivateAndUndo(void)
  173.     {
  174.     return m_pObj->InPlaceActivate(m_pObj->m_pIOleClientSite, TRUE);
  175.     }