⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cntritem.cpp

📁 此程序运用MFC嵌入微软office的PPT功能
💻 CPP
字号:
// CntrItem.cpp : implementation of the CEmbed_PPTCntrItem class
//

#include "stdafx.h"
#include "Embed_PPT.h"

#include "Embed_PPTDoc.h"
#include "Embed_PPTView.h"
#include "CntrItem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEmbed_PPTCntrItem implementation

IMPLEMENT_SERIAL(CEmbed_PPTCntrItem, COleClientItem, 0)

CEmbed_PPTCntrItem::CEmbed_PPTCntrItem(CEmbed_PPTDoc* pContainer)
	: COleClientItem(pContainer)
{
	// TODO: add one-time construction code here
	
}

CEmbed_PPTCntrItem::~CEmbed_PPTCntrItem()
{
	// TODO: add cleanup code here
	
}

void CEmbed_PPTCntrItem::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)
{
	ASSERT_VALID(this);

	COleClientItem::OnChange(nCode, dwParam);

	// When an item is being edited (either in-place or fully open)
	//  it sends OnChange notifications for changes in the state of the
	//  item or visual appearance of its content.

	// TODO: invalidate the item by calling UpdateAllViews
	//  (with hints appropriate to your application)

	GetDocument()->UpdateAllViews(NULL);
		// for now just update ALL views/no hints
}

BOOL CEmbed_PPTCntrItem::OnChangeItemPosition(const CRect& rectPos)
{
	ASSERT_VALID(this);

	// During in-place activation CEmbed_PPTCntrItem::OnChangeItemPosition
	//  is called by the server to change the position of the in-place
	//  window.  Usually, this is a result of the data in the server
	//  document changing such that the extent has changed or as a result
	//  of in-place resizing.
	//
	// The default here is to call the base class, which will call
	//  COleClientItem::SetItemRects to move the item
	//  to the new position.

	if (!COleClientItem::OnChangeItemPosition(rectPos))
		return FALSE;

	// TODO: update any cache you may have of the item's rectangle/extent

	return TRUE;
}

void CEmbed_PPTCntrItem::OnGetItemPosition(CRect& rPosition)
{
	ASSERT_VALID(this);

	// During in-place activation, CEmbed_PPTCntrItem::OnGetItemPosition
	//  will be called to determine the location of this item.  The default
	//  implementation created from AppWizard simply returns a hard-coded
	//  rectangle.  Usually, this rectangle would reflect the current
	//  position of the item relative to the view used for activation.
	//  You can obtain the view by calling CEmbed_PPTCntrItem::GetActiveView.

	// TODO: return correct rectangle (in pixels) in rPosition
	CRect rect;
	GetClientRect(AfxGetMainWnd()->m_hWnd,&rect);

	rPosition.SetRect(rect.left,rect.top,rect.right,rect.bottom);
}

void CEmbed_PPTCntrItem::OnActivate()
{
    // Allow only one inplace activate item per frame
    CEmbed_PPTView* pView = GetActiveView();
    ASSERT_VALID(pView);
    COleClientItem* pItem = GetDocument()->GetInPlaceActiveItem(pView);
    if (pItem != NULL && pItem != this)
        pItem->Close();
    
    COleClientItem::OnActivate();
}

void CEmbed_PPTCntrItem::OnDeactivateUI(BOOL bUndoable)
{
	COleClientItem::OnDeactivateUI(bUndoable);

    // Hide the object if it is not an outside-in object
    DWORD dwMisc = 0;
    m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
    if (dwMisc & OLEMISC_INSIDEOUT)
        DoVerb(OLEIVERB_HIDE, NULL);
}

void CEmbed_PPTCntrItem::Serialize(CArchive& ar)
{
	ASSERT_VALID(this);

	// Call base class first to read in COleClientItem data.
	// Since this sets up the m_pDocument pointer returned from
	//  CEmbed_PPTCntrItem::GetDocument, it is a good idea to call
	//  the base class Serialize first.
	COleClientItem::Serialize(ar);

	// now store/retrieve data specific to CEmbed_PPTCntrItem
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CEmbed_PPTCntrItem diagnostics

#ifdef _DEBUG
void CEmbed_PPTCntrItem::AssertValid() const
{
	COleClientItem::AssertValid();
}

void CEmbed_PPTCntrItem::Dump(CDumpContext& dc) const
{
	COleClientItem::Dump(dc);
}
#endif

/////////////////////////////////////////////////////////////////////////////

LPDISPATCH CEmbed_PPTCntrItem::GetIDispatch()
{
	ASSERT_VALID(this);     
  ASSERT(m_lpObject   !=   NULL);     
  LPUNKNOWN   lpUnk   =   m_lpObject;     
  Run();     
  LPOLELINK   lpOleLink   =   NULL;     
  if(m_lpObject->QueryInterface(IID_IOleLink,(LPVOID   FAR*)&lpOleLink)==   NOERROR)     
  {     
  ASSERT(lpOleLink   !=   NULL);     
  lpUnk   =   NULL;     
  if(lpOleLink->GetBoundSource(&lpUnk)   !=   NOERROR)     
  {     
  TRACE0("Warning:   Link   is   not   connected!\n");     
  lpOleLink->Release();     
  }     
  ASSERT(lpUnk   !=   NULL);     
  }     
  LPDISPATCH   lpDispatch   =   NULL;     
  if(lpUnk->QueryInterface(IID_IDispatch,(LPVOID   FAR*)&lpDispatch)   !=   NOERROR)     
  {     
  TRACE0("Waring:   does   not   support   IDispatch!\n");     
  return   NULL;     
  }     
  ASSERT(lpDispatch   !=   NULL);     
  return   lpDispatch;       

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -