-
Notifications
You must be signed in to change notification settings - Fork 1
/
TinyCADCntrItem.cpp
165 lines (129 loc) · 3.45 KB
/
TinyCADCntrItem.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
// ("Fluent UI"),该示例仅作为参考资料提供,
// 用以补充《Microsoft 基础类参考》和
// MFC C++ 库软件随附的相关电子文档。
// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
// 若要了解有关 Fluent UI 许可计划的详细信息,请访问
// http://msdn.microsoft.com/officeui。
//
// 版权所有 (C) Microsoft Corporation
// 保留所有权利。
// TinyCADCntrItem.cpp : CTinyCADCntrItem 类的实现
//
#include "stdafx.h"
#include "TinyCAD.h"
#include "TinyCADDoc.h"
#include "TinyCADView.h"
#include "TinyCADCntrItem.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTinyCADCntrItem 的实现
IMPLEMENT_SERIAL(CTinyCADCntrItem, COleDocObjectItem, 0)
CTinyCADCntrItem::CTinyCADCntrItem(CTinyCADDoc* pContainer)
: COleDocObjectItem(pContainer)
{
// TODO: 在此添加一次性构造代码
}
CTinyCADCntrItem::~CTinyCADCntrItem()
{
// TODO: 在此处添加清理代码
}
void CTinyCADCntrItem::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)
{
ASSERT_VALID(this);
COleDocObjectItem::OnChange(nCode, dwParam);
// 在编辑某项时(就地编辑或完全打开进行编辑),
// 该项将就其自身状态的更改
// 或其内容的可视外观状态的更改发送 OnChange 通知。
// TODO: 通过调用 UpdateAllViews 使该项无效
// (包括适合您的应用程序的提示)
GetDocument()->UpdateAllViews(NULL);
// 现在只更新所有视图/无提示
}
BOOL CTinyCADCntrItem::OnChangeItemPosition(const CRect& rectPos)
{
ASSERT_VALID(this);
// 就地激活期间,服务器调用 CTinyCADCntrItem::OnChangeItemPosition
// 以更改就地窗口的位置。
// 这通常是由于服务器
// 文档中的数据更改而导致范围改变或是
// 就地调整大小所引起的。
//
// 此处的默认设置调用基类,该基类将调用
// COleDocObjectItem::SetItemRects 以将该项
// 移动到新的位置。
if (!COleDocObjectItem::OnChangeItemPosition(rectPos))
return FALSE;
// TODO: 更新该项的矩形/范围可能存在的任何缓存
return TRUE;
}
BOOL CTinyCADCntrItem::OnShowControlBars(CFrameWnd* pFrameWnd, BOOL bShow)
{
CMDIFrameWndEx* pMainFrame = DYNAMIC_DOWNCAST(CMDIFrameWndEx, pFrameWnd);
if (pMainFrame != NULL)
{
ASSERT_VALID(pMainFrame);
return pMainFrame->OnShowPanes(bShow);
}
return FALSE;
}
void CTinyCADCntrItem::OnActivate()
{
}
void CTinyCADCntrItem::OnDeactivateUI(BOOL bUndoable)
{
COleDocObjectItem::OnDeactivateUI(bUndoable);
DWORD dwMisc = 0;
m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
if (dwMisc & OLEMISC_INSIDEOUT)
DoVerb(OLEIVERB_HIDE, NULL);
}
void CTinyCADCntrItem::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
// 首先调用基类以读取 COleDocObjectItem 数据。
// 因为这样会设置从 CTinyCADCntrItem::GetDocument 返回的 m_pDocument 指针,
// 所以最好先调用
// 基类 Serialize。
COleDocObjectItem::Serialize(ar);
// 现在存储/检索特定于 CTinyCADCntrItem 的数据
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
}
else
{
// TODO: 在此添加加载代码
}
}
BOOL CTinyCADCntrItem::CanActivate()
{
// 当服务器本身处于就地编辑模式时,就地编辑无效且不受支持。
// 因此,在这种情况下禁用就地
// 激活。
CTinyCADDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return FALSE;
ASSERT_KINDOF(COleServerDoc, pDoc);
if (!pDoc->IsKindOf(RUNTIME_CLASS(COleServerDoc)))
{
return FALSE;
}
if (pDoc->IsInPlaceActive())
return FALSE;
// 否则,依赖默认行为
return COleClientItem::CanActivate();
}
// CTinyCADCntrItem 诊断
#ifdef _DEBUG
void CTinyCADCntrItem::AssertValid() const
{
COleDocObjectItem::AssertValid();
}
void CTinyCADCntrItem::Dump(CDumpContext& dc) const
{
COleDocObjectItem::Dump(dc);
}
#endif