-
Notifications
You must be signed in to change notification settings - Fork 1
/
TinyCAD.cpp
259 lines (208 loc) · 6.36 KB
/
TinyCAD.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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
// ("Fluent UI"),该示例仅作为参考资料提供,
// 用以补充《Microsoft 基础类参考》和
// MFC C++ 库软件随附的相关电子文档。
// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
// 若要了解有关 Fluent UI 许可计划的详细信息,请访问
// http://msdn.microsoft.com/officeui。
//
// 版权所有 (C) Microsoft Corporation
// 保留所有权利。
// TinyCAD.cpp : 定义应用程序的类行为。
//
#include "stdafx.h"
#include "afxwinappex.h"
#include "TinyCAD.h"
#include "TinyCADMainFrm.h"
#include "TinyCADChildFrm.h"
#include "TinyCADIpFrame.h"
#include "TinyCADDoc.h"
#include "TinyCADView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTinyCADApp
BEGIN_MESSAGE_MAP(CTinyCADApp, CWinAppEx)
ON_COMMAND(ID_APP_ABOUT, &CTinyCADApp::OnAppAbout)
// 基于文件的标准文档命令
ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
// 标准打印设置命令
ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinAppEx::OnFilePrintSetup)
END_MESSAGE_MAP()
// CTinyCADApp 构造
CTinyCADApp::CTinyCADApp()
{
EnableHtmlHelp();
m_bHiColorIcons = TRUE;
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CTinyCADApp 对象
CTinyCADApp theApp;
// 生成的此标识符在统计上对于您的应用程序是唯一的
// 如果您更愿选择一个特定的标识符,则可以更改它
// {2983F10C-E6AB-4117-924C-28B52D4EDB80}
static const CLSID clsid =
{ 0x2983F10C, 0xE6AB, 0x4117, { 0x92, 0x4C, 0x28, 0xB5, 0x2D, 0x4E, 0xDB, 0x80 } };
const GUID CDECL BASED_CODE _tlid =
{ 0x90CF4A56, 0xE158, 0x431A, { 0xA3, 0x8C, 0x52, 0x6F, 0xF7, 0x1D, 0xCD, 0xAD } };
const WORD _wVerMajor = 1;
const WORD _wVerMinor = 0;
// CTinyCADApp 初始化
BOOL CTinyCADApp::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinAppEx::InitInstance();
// 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
LoadStdProfileSettings(0); // 加载标准 INI 文件选项
InitContextMenuManager();
InitKeyboardManager();
InitTooltipManager();
CMFCToolTipInfo ttParams;
ttParams.m_bVislManagerTheme = TRUE;
theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);
// 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_TinyCADTYPE,
RUNTIME_CLASS(CTinyCADDoc),
RUNTIME_CLASS(CTinyCADChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CTinyCADView));
if (!pDocTemplate)
return FALSE;
pDocTemplate->SetContainerInfo(IDR_TinyCADTYPE_CNTR_IP);
pDocTemplate->SetServerInfo(
IDR_TinyCADTYPE_SRVR_EMB, IDR_TinyCADTYPE_SRVR_IP,
RUNTIME_CLASS(CTinyCADInPlaceFrame));
AddDocTemplate(pDocTemplate);
// 将 COleTemplateServer 连接到文档模板
// COleTemplateServer 通过使用
// 文档模板中指定的信息来为请求 OLE 容器
// 创建新文档
m_server.ConnectTemplate(clsid, pDocTemplate, FALSE);
// 将所有的 OLE 服务器工厂注册为正在运行。这将启用
// OLE 库以从其他应用程序中创建对象
COleTemplateServer::RegisterAll();
// 注意: MDI 应用程序将注册所有的服务器对象,而不管
// 命令行上的 /Embedding 或 /Automation
// 创建主 MDI 框架窗口
CTinyCADMainFrame* pMainFrame = new CTinyCADMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
m_pMainWnd = pMainFrame;
// 仅当具有后缀时才调用 DragAcceptFiles
// 在 MDI 应用程序中,这应在设置 m_pMainWnd 之后立即发生
// 启用拖/放
m_pMainWnd->DragAcceptFiles();
// 启用“DDE 执行”
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// 分析标准外壳命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 应用程序是用 /Embedding 或 /Automation 开关启动的。
//使应用程序作为自动化服务器运行。
if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated)
{
// 不显示主窗口
return TRUE;
}
// 使用 /Unregserver 或 /Unregister 开关启动应用程序。注销
// 类型库。其他注销操作在 ProcessShellCommand() 中发生。
else if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppUnregister)
{
UnregisterShellFileTypes();
m_server.UpdateRegistry(OAT_DOC_OBJECT_SERVER, NULL, NULL, FALSE);
AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor);
}
// 应用程序是以独立方式或用其他开关(如 /Register
// 或 /Regserver)启动的。更新注册表项,包括类型库。
else
{
m_server.UpdateRegistry(OAT_DOC_OBJECT_SERVER);
COleObjectFactory::UpdateRegistryAll();
AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid);
}
// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// 主窗口已初始化,因此显示它并对其进行更新
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// 用于运行对话框的应用程序命令
void CTinyCADApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
// CTinyCADApp 自定义加载/保存方法
void CTinyCADApp::PreLoadState()
{
BOOL bNameValid;
CString strName;
bNameValid = strName.LoadString(IDS_EDIT_MENU);
ASSERT(bNameValid);
GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT);
bNameValid = strName.LoadString(IDS_EXPLORER);
ASSERT(bNameValid);
GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EXPLORER);
}
void CTinyCADApp::LoadCustomState()
{
}
void CTinyCADApp::SaveCustomState()
{
}
// CTinyCADApp 消息处理程序