cntritem.cpp
来自「Visual_C++.NET实用编程百例」· C++ 代码 · 共 149 行
CPP
149 行
// CntrItem.cpp : ColeContainCntrItem 类的实现
//
#include "stdafx.h"
#include "oleContain.h"
#include "oleContainDoc.h"
#include "oleContainView.h"
#include "CntrItem.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// ColeContainCntrItem 的实现
IMPLEMENT_SERIAL(ColeContainCntrItem, COleClientItem, 0)
ColeContainCntrItem::ColeContainCntrItem(ColeContainDoc* pContainer)
: COleClientItem(pContainer)
{
// TODO: 在此添加一次性构造代码
m_rect.SetRect (50,50,250,250);
}
ColeContainCntrItem::~ColeContainCntrItem()
{
// TODO: 在此处添加清除代码
}
void ColeContainCntrItem::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)
{
ASSERT_VALID(this);
COleClientItem::OnChange(nCode, dwParam);
// 在编辑某项时(就地编辑或完全打开进行编辑),
//该项将就其自身状态的更改
// 或其内容的可视外观状态的更改发送 OnChange 通知。
// TODO: 通过调用 UpdateAllViews 使该项无效
//(包括适合您的应用程序的提示)
GetDocument()->UpdateAllViews(NULL);
// 现在更新所有视图/无提示
}
BOOL ColeContainCntrItem::OnChangeItemPosition(const CRect& rectPos)
{
ASSERT_VALID(this);
// 就地激活期间,服务器调用 ColeContainCntrItem::OnChangeItemPosition
// 以更改就地
// 窗口的位置。这通常是由于服务器
// 文档中的数据更改而导致范围改变或是
// 就地调整大小所引起的。
//
// 此处的默认设置调用基类,该基类将调用
// COleClientItem::SetItemRects 以将该项
// 移动到新的位置。
if (!COleClientItem::OnChangeItemPosition(rectPos))
return FALSE;
// TODO: 更新您在该项的矩形/范围内可具有的任何缓存
m_rect=rectPos;
GetDocument()->SetModifiedFlag ();
GetDocument()->UpdateAllViews (NULL);
return TRUE;
}
void ColeContainCntrItem::OnGetItemPosition(CRect& rPosition)
{
ASSERT_VALID(this);
// 就地激活期间,将调用ColeContainCntrItem::OnGetItemPosition
// 以决定该项的位置。通常,
// 该矩形会反映与激活所用视图
// 相关项的当前位置。调用
// ColeContainCntrItem::GetActiveView 可得到视图。
// TODO: 返回 rPosition 中的正确矩形(以像素表示)
rPosition=m_rect;
}
void ColeContainCntrItem::OnActivate()
{
// 每个框架只能有一个就地激活项
ColeContainView* pView = GetActiveView();
ASSERT_VALID(pView);
if (!pView)
return;
COleClientItem* pItem = GetDocument()->GetInPlaceActiveItem(pView);
if (pItem != NULL && pItem != this)
pItem->Close();
COleClientItem::OnActivate();
}
void ColeContainCntrItem::OnDeactivateUI(BOOL bUndoable)
{
COleClientItem::OnDeactivateUI(bUndoable);
DWORD dwMisc = 0;
m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
if (dwMisc & OLEMISC_INSIDEOUT)
DoVerb(OLEIVERB_HIDE, NULL);
}
void ColeContainCntrItem::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
// 首先调用基类以读取 COleClientItem 数据。
// 因为这样会设置从 ColeContainCntrItem::GetDocument 返回的 m_pDocument 指针
//,所以最好先调用
// 基类 Serialize。
COleClientItem::Serialize(ar);
// 现在存储/检索特定于 ColeContainCntrItem 的数据
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
ar<<m_rect;
}
else
{
// TODO: 在此添加加载代码
ar>>m_rect;
}
}
// ColeContainCntrItem 诊断
#ifdef _DEBUG
void ColeContainCntrItem::AssertValid() const
{
COleClientItem::AssertValid();
}
void ColeContainCntrItem::Dump(CDumpContext& dc) const
{
COleClientItem::Dump(dc);
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?