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

📄 cntritem.cpp

📁 《Visual C++.NET MFC类库应用详解》程序实例
💻 CPP
字号:
// CntrItem.cpp : CContainerCntrItem 类的实现
//

#include "stdafx.h"
#include "Container.h"

#include "ContainerDoc.h"
#include "ContainerView.h"
#include "CntrItem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CContainerCntrItem 的实现

IMPLEMENT_SERIAL(CContainerCntrItem, COleClientItem, 0)

CContainerCntrItem::CContainerCntrItem(CContainerDoc* pContainer)
	: COleClientItem(pContainer)
{
	// TODO:在此添加一次性构造代码
	m_ObRect.left=100;
	m_ObRect.top=100;
	m_ObRect.right=200;
	m_ObRect.bottom=200;
}

CContainerCntrItem::~CContainerCntrItem()
{
	// TODO: 在此处添加清除代码
}

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

	COleClientItem::OnChange(nCode, dwParam);

	// 在编辑某项时(就地编辑或完全打开进行编辑),
	//该项将就其自身状态的更改
	// 或其内容的可视外观状态的更改发送 OnChange 通知。

	// TODO:通过调用 UpdateAllViews 使该项无效
	//(包括适合您的应用程序的提示)

	GetDocument()->UpdateAllViews(NULL);
		// 现在更新所有视图/无提示
}

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

	// 就地激活期间,服务器调用 CContainerCntrItem::OnChangeItemPosition
	// 以更改就地窗口的位置。这通常是由于服务器文档中
	//  的数据更改而导致范围改变或是就地调整大小所引起的。
	// 此处的默认设置调用基类,该基类将调用
	//  COleClientItem::SetItemRects 以将该项移动到新的位置。

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

	// TODO:更新您在该项的矩形/范围内可具有的任何缓存
    m_ObRect=rectPos;
    CContainerDoc *pDoc=GetDocument();
	pDoc->SetModifiedFlag();
	pDoc->UpdateAllViews(NULL);

	return TRUE;
}

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

	// 就地激活期间,将调用CContainerCntrItem::OnGetItemPosition
	//  以决定该项的位置。通常,
	//  该矩形会反映与激活所用视图 
	//  相关项的当前位置。调用 
	//  CContainerCntrItem::GetActiveView 可得到视图。

	// TODO:返回 rPosition 中的正确矩形(以像素表示)

    rPosition=m_ObRect;
/*
	CSize size;
	
	if (SUCCEEDED(GetExtent(&size, m_nDrawAspect)))
	{
		CContainerView* pView = GetActiveView();
		ASSERT_VALID(pView);
		CDC *pDC = pView->GetDC();
		ASSERT(pDC);
		pDC->HIMETRICtoLP(&size);
		rPosition.SetRect(10, 10, size.cx + 10, size.cy + 10);
	}
	else
		rPosition.SetRect(10, 10, 210, 210);
*/
}

void CContainerCntrItem::OnActivate()
{
    // 每个框架只能有一个就地激活项
    CContainerView* pView = GetActiveView();
    ASSERT_VALID(pView);
    COleClientItem* pItem = GetDocument()->GetInPlaceActiveItem(pView);
    if (pItem != NULL && pItem != this)
        pItem->Close();
    
    COleClientItem::OnActivate();
}

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

    DWORD dwMisc = 0;
    m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
    if (dwMisc & OLEMISC_INSIDEOUT)
        DoVerb(OLEIVERB_HIDE, NULL);
}

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

	// 首先调用基类以读取 COleClientItem 数据。
	// 因为这样会设置从 CContainerCntrItem::GetDocument 返回的 m_pDocument 指针,
	// 所以最好先调用基类 Serialize。
	COleClientItem::Serialize(ar);

	// 现在存储/检索特定于 CContainerCntrItem 的数据
	if (ar.IsStoring())
	{
		// TODO:在此添加存储代码
		ar<<m_ObRect;
	}
	else
	{
		// TODO:在此添加加载代码
		ar>>m_ObRect;
	}
}


// CContainerCntrItem 诊断

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

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

⌨️ 快捷键说明

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