QuakeGod
2024-12-24 61deef5cdf96cbfdd6ad45be49e80d597c00ca65
提交 | 用户 | age
61deef 1 
Q 2 // MFCMView.cpp: 定义应用程序的类行为。
3 //
4
5 #include "pch.h"
6 #include "framework.h"
7 #include "afxwinappex.h"
8 #include "afxdialogex.h"
9 #include "MFCMView.h"
10 #include "MainFrm.h"
11
12 #include "ChildFrm.h"
13
14 #ifdef _DEBUG
15 #define new DEBUG_NEW
16 #endif
17
18
19 // CMFCMViewApp
20
21 BEGIN_MESSAGE_MAP(CMFCMViewApp, CWinAppEx)
22     ON_COMMAND(ID_APP_ABOUT, &CMFCMViewApp::OnAppAbout)
23     ON_COMMAND(ID_FILE_NEW, &CMFCMViewApp::OnFileNew)
24 END_MESSAGE_MAP()
25
26
27 // CMFCMViewApp 构造
28
29 CMFCMViewApp::CMFCMViewApp() noexcept
30 {
31
32     // 支持重新启动管理器
33     m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;
34 #ifdef _MANAGED
35     // 如果应用程序是利用公共语言运行时支持(/clr)构建的,则: 
36     //     1) 必须有此附加设置,“重新启动管理器”支持才能正常工作。
37     //     2) 在您的项目中,您必须按照生成顺序向 System.Windows.Forms 添加引用。
38     System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException);
39 #endif
40
41     // TODO: 将以下应用程序 ID 字符串替换为唯一的 ID 字符串;建议的字符串格式
42     //为 CompanyName.ProductName.SubProduct.VersionInformation
43     SetAppID(_T("MFCMView.AppID.NoVersion"));
44
45     // TODO:  在此处添加构造代码,
46     // 将所有重要的初始化放置在 InitInstance 中
47 }
48
49 // 唯一的 CMFCMViewApp 对象
50
51 CMFCMViewApp theApp;
52
53
54 // CMFCMViewApp 初始化
55
56 BOOL CMFCMViewApp::InitInstance()
57 {
58     // 如果一个运行在 Windows XP 上的应用程序清单指定要
59     // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
60     //则需要 InitCommonControlsEx()。  否则,将无法创建窗口。
61     INITCOMMONCONTROLSEX InitCtrls;
62     InitCtrls.dwSize = sizeof(InitCtrls);
63     // 将它设置为包括所有要在应用程序中使用的
64     // 公共控件类。
65     InitCtrls.dwICC = ICC_WIN95_CLASSES;
66     InitCommonControlsEx(&InitCtrls);
67
68     CWinAppEx::InitInstance();
69
70
71     // 初始化 OLE 库
72     if (!AfxOleInit())
73     {
74         AfxMessageBox(IDP_OLE_INIT_FAILED);
75         return FALSE;
76     }
77
78     AfxEnableControlContainer();
79
80     EnableTaskbarInteraction();
81
82     // 使用 RichEdit 控件需要 AfxInitRichEdit2()
83     // AfxInitRichEdit2();
84
85     // 标准初始化
86     // 如果未使用这些功能并希望减小
87     // 最终可执行文件的大小,则应移除下列
88     // 不需要的特定初始化例程
89     // 更改用于存储设置的注册表项
90     // TODO: 应适当修改该字符串,
91     // 例如修改为公司或组织名
92     SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
93
94
95     // 若要创建主窗口,此代码将创建新的框架窗口
96     // 对象,然后将其设置为应用程序的主窗口对象
97     CMDIFrameWnd* pFrame = new CMainFrame;
98     if (!pFrame)
99         return FALSE;
100     m_pMainWnd = pFrame;
101     // 创建主 MDI 框架窗口
102     if (!pFrame->LoadFrame(IDR_MAINFRAME))
103         return FALSE;
104     // 试图加载共享 MDI 菜单和快捷键表
105     //TODO: 添加附加成员变量,并加载对
106     //    应用程序可能需要的附加菜单类型的调用
107     HINSTANCE hInst = AfxGetResourceHandle();
108     m_hMDIMenu  = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_MFCMViewTYPE));
109     m_hMDIAccel = ::LoadAccelerators(hInst, MAKEINTRESOURCE(IDR_MFCMViewTYPE));
110
111
112
113
114     // 主窗口已初始化,因此显示它并对其进行更新
115     pFrame->ShowWindow(m_nCmdShow);
116     pFrame->UpdateWindow();
117
118     return TRUE;
119 }
120
121 int CMFCMViewApp::ExitInstance()
122 {
123     //TODO: 处理可能已添加的附加资源
124     if (m_hMDIMenu != nullptr)
125         FreeResource(m_hMDIMenu);
126     if (m_hMDIAccel != nullptr)
127         FreeResource(m_hMDIAccel);
128
129     AfxOleTerm(FALSE);
130
131     return CWinAppEx::ExitInstance();
132 }
133
134 // CMFCMViewApp 消息处理程序
135
136 void CMFCMViewApp::OnFileNew()
137 {
138     CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd);
139     pFrame->LockWindowUpdate();
140     // 创建新的 MDI 子窗口
141     pFrame->CreateNewChild(
142         RUNTIME_CLASS(CChildFrame), IDR_MFCMViewTYPE, m_hMDIMenu, m_hMDIAccel);
143     pFrame->UnlockWindowUpdate();
144 }
145
146 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
147
148 class CAboutDlg : public CDialogEx
149 {
150 public:
151     CAboutDlg() noexcept;
152
153 // 对话框数据
154 #ifdef AFX_DESIGN_TIME
155     enum { IDD = IDD_ABOUTBOX };
156 #endif
157
158 protected:
159     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
160
161 // 实现
162 protected:
163     DECLARE_MESSAGE_MAP()
164 };
165
166 CAboutDlg::CAboutDlg() noexcept : CDialogEx(IDD_ABOUTBOX)
167 {
168 }
169
170 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
171 {
172     CDialogEx::DoDataExchange(pDX);
173 }
174
175 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
176 END_MESSAGE_MAP()
177
178 // 用于运行对话框的应用程序命令
179 void CMFCMViewApp::OnAppAbout()
180 {
181     CAboutDlg aboutDlg;
182     aboutDlg.DoModal();
183 }
184
185 // CMFCMViewApp 消息处理程序
186
187
188