فهرست منبع

【软件版本】
V
【模块名称】
远程场测工具
【问题原因】
初版,空程序。
【修改描述】

【测试结果】

sat23 3 سال پیش
والد
کامیت
e7b4ab95bd
38فایلهای تغییر یافته به همراه2781 افزوده شده و 0 حذف شده
  1. 20 0
      FieldTestTool/FieldTestTool.sln
  2. 153 0
      FieldTestTool/FieldTestTool/CalendarBar.cpp
  3. 44 0
      FieldTestTool/FieldTestTool/CalendarBar.h
  4. 97 0
      FieldTestTool/FieldTestTool/ChildFrm.cpp
  5. 46 0
      FieldTestTool/FieldTestTool/ChildFrm.h
  6. 203 0
      FieldTestTool/FieldTestTool/FieldTestTool.cpp
  7. 49 0
      FieldTestTool/FieldTestTool/FieldTestTool.h
  8. 591 0
      FieldTestTool/FieldTestTool/FieldTestTool.rc
  9. 364 0
      FieldTestTool/FieldTestTool/FieldTestTool.vcproj
  10. 89 0
      FieldTestTool/FieldTestTool/FieldTestToolDoc.cpp
  11. 51 0
      FieldTestTool/FieldTestTool/FieldTestToolDoc.h
  12. 127 0
      FieldTestTool/FieldTestTool/FieldTestToolView.cpp
  13. 63 0
      FieldTestTool/FieldTestTool/FieldTestToolView.h
  14. 469 0
      FieldTestTool/FieldTestTool/MainFrm.cpp
  15. 84 0
      FieldTestTool/FieldTestTool/MainFrm.h
  16. 96 0
      FieldTestTool/FieldTestTool/ReadMe.txt
  17. 95 0
      FieldTestTool/FieldTestTool/Resource.h
  18. BIN
      FieldTestTool/FieldTestTool/res/FieldTestTool.ico
  19. 13 0
      FieldTestTool/FieldTestTool/res/FieldTestTool.rc2
  20. BIN
      FieldTestTool/FieldTestTool/res/FieldTestToolDoc.ico
  21. BIN
      FieldTestTool/FieldTestTool/res/Toolbar.bmp
  22. BIN
      FieldTestTool/FieldTestTool/res/Toolbar256.bmp
  23. BIN
      FieldTestTool/FieldTestTool/res/buttons.bmp
  24. BIN
      FieldTestTool/FieldTestTool/res/filelarge.bmp
  25. BIN
      FieldTestTool/FieldTestTool/res/filesmall.bmp
  26. BIN
      FieldTestTool/FieldTestTool/res/info.bmp
  27. BIN
      FieldTestTool/FieldTestTool/res/main.bmp
  28. BIN
      FieldTestTool/FieldTestTool/res/nav_large.bmp
  29. BIN
      FieldTestTool/FieldTestTool/res/nav_large_hc.bmp
  30. BIN
      FieldTestTool/FieldTestTool/res/pages.bmp
  31. BIN
      FieldTestTool/FieldTestTool/res/pages_hc.bmp
  32. BIN
      FieldTestTool/FieldTestTool/res/pages_small.bmp
  33. BIN
      FieldTestTool/FieldTestTool/res/pages_small_hc.bmp
  34. BIN
      FieldTestTool/FieldTestTool/res/writelarge.bmp
  35. BIN
      FieldTestTool/FieldTestTool/res/writesmall.bmp
  36. 18 0
      FieldTestTool/FieldTestTool/stdafx.cpp
  37. 73 0
      FieldTestTool/FieldTestTool/stdafx.h
  38. 36 0
      FieldTestTool/FieldTestTool/targetver.h

+ 20 - 0
FieldTestTool/FieldTestTool.sln

@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FieldTestTool", "FieldTestTool\FieldTestTool.vcproj", "{E07BE121-625B-42ED-B75F-443ED3D296DF}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E07BE121-625B-42ED-B75F-443ED3D296DF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E07BE121-625B-42ED-B75F-443ED3D296DF}.Debug|Win32.Build.0 = Debug|Win32
+		{E07BE121-625B-42ED-B75F-443ED3D296DF}.Release|Win32.ActiveCfg = Release|Win32
+		{E07BE121-625B-42ED-B75F-443ED3D296DF}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 153 - 0
FieldTestTool/FieldTestTool/CalendarBar.cpp

@@ -0,0 +1,153 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#include "stdafx.h"
+#include "CalendarBar.h"
+#include "FieldTestTool.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+const int nBorderSize = 10;
+
+/////////////////////////////////////////////////////////////////////////////
+// CCalendarBar
+
+CCalendarBar::CCalendarBar()
+{
+	m_nMyCalendarsY = 0;
+}
+
+CCalendarBar::~CCalendarBar()
+{
+}
+
+BEGIN_MESSAGE_MAP(CCalendarBar, CWnd)
+	ON_WM_CREATE()
+	ON_WM_ERASEBKGND()
+	ON_WM_SIZE()
+	ON_WM_PAINT()
+	ON_WM_SETTINGCHANGE()
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CCalendarBar 消息处理程序
+
+int CCalendarBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CWnd::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	CRect rectDummy(0, 0, 0, 0);
+	m_wndCalendar.Create(WS_CHILD | WS_VISIBLE, rectDummy, this, 1);
+
+	CBitmap bmp;
+	bmp.LoadBitmap(IDB_PAGES_SMALL_HC);
+
+	m_Images.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 0);
+	m_Images.Add(&bmp, RGB(255, 0, 255));
+
+	return 0;
+}
+
+BOOL CCalendarBar::OnEraseBkgnd(CDC* /*pDC*/)
+{
+	return TRUE;
+}
+
+void CCalendarBar::OnSize(UINT nType, int cx, int cy)
+{
+	CWnd::OnSize(nType, cx, cy);
+
+	int nMyCalendarsHeight = 70;
+
+	if (m_wndCalendar.GetSafeHwnd() != NULL)
+	{
+		m_wndCalendar.SetWindowPos(NULL, nBorderSize, nBorderSize, cx - 2 * nBorderSize, cy - 2 * nBorderSize - nMyCalendarsHeight - 10, SWP_NOZORDER | SWP_NOACTIVATE);
+	}
+
+	m_nMyCalendarsY = cy - nMyCalendarsHeight;
+}
+
+BOOL CCalendarBar::Create(const RECT& rect, CWnd* pParentWnd, UINT nID)
+{
+	return CWnd::Create(NULL, _T(""), WS_CHILD | WS_VISIBLE, rect, pParentWnd, nID);
+}
+
+void CCalendarBar::OnPaint()
+{
+	CPaintDC dc(this); // 用于绘制的设备上下文
+
+	CRect rectClient;
+	GetClientRect(rectClient);
+
+	dc.FillRect(rectClient, &afxGlobalData.brWindow);
+
+	if (rectClient.bottom - m_nMyCalendarsY > 0)
+	{
+		CRect rectMyCalendarsCaption = rectClient;
+		rectMyCalendarsCaption.top = m_nMyCalendarsY;
+		rectMyCalendarsCaption.bottom = rectMyCalendarsCaption.top + afxGlobalData.GetTextHeight(TRUE) * 3 / 2;
+
+		COLORREF clrText = CMFCVisualManager::GetInstance()->OnDrawPaneCaption(&dc, NULL, FALSE, rectMyCalendarsCaption, CRect(0, 0, 0, 0));
+
+		CPen* pOldPen = dc.SelectObject(&afxGlobalData.penBarShadow);
+
+		dc.MoveTo(rectMyCalendarsCaption.left - 1, rectMyCalendarsCaption.top);
+		dc.LineTo(rectMyCalendarsCaption.right, rectMyCalendarsCaption.top);
+
+		dc.SelectStockObject(BLACK_PEN);
+
+		dc.MoveTo(rectMyCalendarsCaption.left - 1, rectMyCalendarsCaption.bottom);
+		dc.LineTo(rectMyCalendarsCaption.right, rectMyCalendarsCaption.bottom);
+
+		dc.SelectObject(pOldPen);
+
+		CRect rectText = rectMyCalendarsCaption;
+		rectText.DeflateRect(10, 0);
+
+		dc.SetBkMode(TRANSPARENT);
+		dc.SetTextColor(clrText);
+
+		CFont* pOldFont = dc.SelectObject(&afxGlobalData.fontRegular);
+
+		BOOL bNameValid;
+		CString str;
+
+		bNameValid = str.LoadString(IDS_MYCALENDARS);
+		ASSERT(bNameValid);
+		dc.DrawText(str, rectText, DT_VCENTER | DT_LEFT | DT_SINGLELINE);
+
+		CRect rectCalendar = rectClient;
+		rectCalendar.top = rectMyCalendarsCaption.bottom + 5;
+		rectCalendar.bottom = rectCalendar.top + afxGlobalData.GetTextHeight(TRUE) * 3 / 2 - 5;
+
+		dc.FillSolidRect(rectCalendar, RGB(255, 255, 213));
+
+		rectCalendar.DeflateRect(20, 0);
+		m_Images.Draw(&dc, 3, rectCalendar.TopLeft(), 0);
+
+		rectCalendar.left += 20;
+
+		bNameValid = str.LoadString(IDS_CALENDAR);
+		ASSERT(bNameValid);
+
+		dc.SetTextColor(afxGlobalData.clrHotLinkNormalText);
+		dc.DrawText(str, rectCalendar, DT_VCENTER | DT_LEFT | DT_SINGLELINE);
+
+		dc.SelectObject(pOldFont);
+	}
+}
+
+

+ 44 - 0
FieldTestTool/FieldTestTool/CalendarBar.h

@@ -0,0 +1,44 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CCalendarBar 窗口
+
+class CCalendarBar : public CWnd
+{
+// 构造
+public:
+	CCalendarBar();
+
+// 属性
+protected:
+	CMonthCalCtrl m_wndCalendar;
+	int m_nMyCalendarsY;
+	CImageList m_Images;
+
+// 重写
+public:
+	virtual BOOL Create(const RECT& rect, CWnd* pParentWnd, UINT nID = (UINT)-1);
+
+// 实现
+public:
+	virtual ~CCalendarBar();
+
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	afx_msg void OnPaint();
+
+	DECLARE_MESSAGE_MAP()
+};

+ 97 - 0
FieldTestTool/FieldTestTool/ChildFrm.cpp

@@ -0,0 +1,97 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// ChildFrm.cpp : CChildFrame 类的实现
+//
+
+#include "stdafx.h"
+#include "FieldTestTool.h"
+
+#include "ChildFrm.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+// CChildFrame
+
+IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWndEx)
+
+BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWndEx)
+	ON_COMMAND(ID_FILE_PRINT, &CChildFrame::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CChildFrame::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CChildFrame::OnFilePrintPreview)
+	ON_UPDATE_COMMAND_UI(ID_FILE_PRINT_PREVIEW, &CChildFrame::OnUpdateFilePrintPreview)
+END_MESSAGE_MAP()
+
+// CChildFrame 构造/析构
+
+CChildFrame::CChildFrame()
+{
+	// TODO: 在此添加成员初始化代码
+}
+
+CChildFrame::~CChildFrame()
+{
+}
+
+
+BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
+{
+	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式
+	if( !CMDIChildWndEx::PreCreateWindow(cs) )
+		return FALSE;
+
+    // 只去掉最大化最小化按钮;
+    //cs.style &= ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX |WS_THICKFRAME);
+
+    // 去掉整个菜单(最大化、最小化、关闭……),此时GetSystemMenu(FALSE)返回NULL;
+    //cs.style &= ~(WS_SYSMENU|FWS_ADDTOTITLE);
+
+	return TRUE;
+}
+
+// CChildFrame 诊断
+
+#ifdef _DEBUG
+void CChildFrame::AssertValid() const
+{
+	CMDIChildWndEx::AssertValid();
+}
+
+void CChildFrame::Dump(CDumpContext& dc) const
+{
+	CMDIChildWndEx::Dump(dc);
+}
+#endif //_DEBUG
+
+// CChildFrame 消息处理程序
+
+void CChildFrame::OnFilePrint()
+{
+	if (m_dockManager.IsPrintPreviewValid())
+	{
+		PostMessage(WM_COMMAND, AFX_ID_PREVIEW_PRINT);
+	}
+}
+
+void CChildFrame::OnFilePrintPreview()
+{
+	if (m_dockManager.IsPrintPreviewValid())
+	{
+		PostMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE);  // 强制关闭“打印预览”模式
+	}
+}
+
+void CChildFrame::OnUpdateFilePrintPreview(CCmdUI* pCmdUI)
+{
+	pCmdUI->SetCheck(m_dockManager.IsPrintPreviewValid());
+}

+ 46 - 0
FieldTestTool/FieldTestTool/ChildFrm.h

@@ -0,0 +1,46 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// ChildFrm.h : CChildFrame 类的接口
+//
+
+#pragma once
+
+class CChildFrame : public CMDIChildWndEx
+{
+	DECLARE_DYNCREATE(CChildFrame)
+public:
+	CChildFrame();
+
+// 属性
+public:
+
+// 操作
+public:
+
+// 重写
+	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
+
+// 实现
+public:
+	virtual ~CChildFrame();
+#ifdef _DEBUG
+	virtual void AssertValid() const;
+	virtual void Dump(CDumpContext& dc) const;
+#endif
+
+// 生成的消息映射函数
+protected:
+	afx_msg void OnFilePrint();
+	afx_msg void OnFilePrintPreview();
+	afx_msg void OnUpdateFilePrintPreview(CCmdUI* pCmdUI);
+	DECLARE_MESSAGE_MAP()
+};

+ 203 - 0
FieldTestTool/FieldTestTool/FieldTestTool.cpp

@@ -0,0 +1,203 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// FieldTestTool.cpp : 定义应用程序的类行为。
+//
+
+#include "stdafx.h"
+#include "afxwinappex.h"
+#include "FieldTestTool.h"
+#include "MainFrm.h"
+
+#include "ChildFrm.h"
+#include "FieldTestToolDoc.h"
+#include "FieldTestToolView.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+
+// CFieldTestToolApp
+
+BEGIN_MESSAGE_MAP(CFieldTestToolApp, CWinAppEx)
+	ON_COMMAND(ID_APP_ABOUT, &CFieldTestToolApp::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()
+
+
+// CFieldTestToolApp 构造
+
+CFieldTestToolApp::CFieldTestToolApp()
+{
+
+	m_bHiColorIcons = TRUE;
+
+	// TODO: 在此处添加构造代码,
+	// 将所有重要的初始化放置在 InitInstance 中
+}
+
+// 唯一的一个 CFieldTestToolApp 对象
+
+CFieldTestToolApp theApp;
+
+
+// CFieldTestToolApp 初始化
+
+BOOL CFieldTestToolApp::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();
+	InitShellManager();
+
+	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_FieldTestToolTYPE,
+		RUNTIME_CLASS(CFieldTestToolDoc),
+		RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
+		RUNTIME_CLASS(CFieldTestToolView));
+	if (!pDocTemplate)
+		return FALSE;
+	AddDocTemplate(pDocTemplate);
+
+	// 创建主 MDI 框架窗口
+	CMainFrame* pMainFrame = new CMainFrame;
+	if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
+	{
+		delete pMainFrame;
+		return FALSE;
+	}
+	m_pMainWnd = pMainFrame;
+	// 仅当具有后缀时才调用 DragAcceptFiles
+	//  在 MDI 应用程序中,这应在设置 m_pMainWnd 之后立即发生
+
+
+	// 分析标准外壳命令、DDE、打开文件操作的命令行
+	CCommandLineInfo cmdInfo;
+#ifdef DISABLE_NEWFILE
+    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
+#endif
+	ParseCommandLine(cmdInfo);
+
+
+	// 调度在命令行中指定的命令。如果
+	// 用 /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 CFieldTestToolApp::OnAppAbout()
+{
+	CAboutDlg aboutDlg;
+	aboutDlg.DoModal();
+}
+
+// CFieldTestToolApp 自定义加载/保存方法
+
+void CFieldTestToolApp::PreLoadState()
+{
+	BOOL bNameValid;
+	CString strName;
+	bNameValid = strName.LoadString(IDS_EDIT_MENU);
+	ASSERT(bNameValid);
+	GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT);
+}
+
+void CFieldTestToolApp::LoadCustomState()
+{
+}
+
+void CFieldTestToolApp::SaveCustomState()
+{
+}
+
+// CFieldTestToolApp 消息处理程序
+
+
+

+ 49 - 0
FieldTestTool/FieldTestTool/FieldTestTool.h

@@ -0,0 +1,49 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// FieldTestTool.h : FieldTestTool 应用程序的主头文件
+//
+#pragma once
+
+#ifndef __AFXWIN_H__
+	#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
+#endif
+
+#include "resource.h"       // 主符号
+
+
+// CFieldTestToolApp:
+// 有关此类的实现,请参阅 FieldTestTool.cpp
+//
+
+class CFieldTestToolApp : public CWinAppEx
+{
+public:
+	CFieldTestToolApp();
+
+
+// 重写
+public:
+	virtual BOOL InitInstance();
+
+// 实现
+	UINT  m_nAppLook;
+	BOOL  m_bHiColorIcons;
+
+	virtual void PreLoadState();
+	virtual void LoadCustomState();
+	virtual void SaveCustomState();
+
+	afx_msg void OnAppAbout();
+	DECLARE_MESSAGE_MAP()
+};
+
+extern CFieldTestToolApp theApp;

+ 591 - 0
FieldTestTool/FieldTestTool/FieldTestTool.rc

@@ -0,0 +1,591 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#ifndef APSTUDIO_INVOKED
+#include "targetver.h"
+#endif
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// 中文(中华人民共和国) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+#ifdef _WIN32
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+#pragma code_page(936)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#ifndef APSTUDIO_INVOKED\r\n"
+    "#include ""targetver.h""\r\n"
+    "#endif\r\n"
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "#define _AFX_NO_OLE_RESOURCES\r\n"
+    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
+    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
+    "\r\n"
+    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
+    "LANGUAGE 4, 2\r\n"
+    "#pragma code_page(936)\r\n"
+    "#include ""res\\FieldTestTool.rc2""  // 非 Microsoft Visual C++ 编辑的资源\r\n"
+    "#include ""l.CHS\\afxres.rc""          // 标准组件\r\n"
+    "#include ""l.CHS\\afxprint.rc""        // 打印/打印预览资源\r\n"
+    "#if !defined(_AFXDLL)\r\n"
+    "#include ""l.CHS\\afxribbon.rc""               // MFC 功能区和控件条资源\r\n"
+    "#endif\r\n"
+    "#endif\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDR_MAINFRAME           ICON                    "res\\FieldTestTool.ico"
+IDR_FieldTestToolTYPE   ICON                    "res\\FieldTestToolDoc.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDR_MAINFRAME           BITMAP                  "res\\Toolbar.bmp"
+IDR_MAINFRAME_256       BITMAP                  "res\\Toolbar256.bmp"
+IDB_MAIN                BITMAP                  "res\\main.bmp"
+IDB_FILELARGE           BITMAP                  "res\\filelarge.bmp"
+IDB_FILESMALL           BITMAP                  "res\\filesmall.bmp"
+IDB_WRITELARGE          BITMAP                  "res\\writelarge.bmp"
+IDB_WRITESMALL          BITMAP                  "res\\writesmall.bmp"
+IDB_BUTTONS             BITMAP                  "res\\buttons.bmp"
+IDB_NAVIGATION_LARGE    BITMAP                  "res\\nav_large.bmp"
+IDB_NAVIGATION_LARGE_HC BITMAP                  "res\\nav_large_hc.bmp"
+IDB_PAGES               BITMAP                  "res\\pages.bmp"
+IDB_PAGES_HC            BITMAP                  "res\\pages_hc.bmp"
+IDB_PAGES_SMALL         BITMAP                  "res\\pages_small.bmp"
+IDB_PAGES_SMALL_HC      BITMAP                  "res\\pages_small_hc.bmp"
+IDB_INFO                BITMAP                  "res\\info.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Toolbar
+//
+
+IDR_MAINFRAME TOOLBAR  16, 16
+BEGIN
+    BUTTON      ID_FILE_NEW
+    BUTTON      ID_FILE_OPEN
+    BUTTON      ID_FILE_SAVE
+    SEPARATOR
+    BUTTON      ID_EDIT_CUT
+    BUTTON      ID_EDIT_COPY
+    BUTTON      ID_EDIT_PASTE
+    SEPARATOR
+    BUTTON      ID_FILE_PRINT
+    BUTTON      ID_APP_ABOUT
+END
+
+IDR_MAINFRAME_256 TOOLBAR  16, 16
+BEGIN
+    BUTTON      ID_FILE_NEW
+    BUTTON      ID_FILE_OPEN
+    BUTTON      ID_FILE_SAVE
+    SEPARATOR
+    BUTTON      ID_EDIT_CUT
+    BUTTON      ID_EDIT_COPY
+    BUTTON      ID_EDIT_PASTE
+    SEPARATOR
+    BUTTON      ID_FILE_PRINT
+    BUTTON      ID_APP_ABOUT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_MAINFRAME MENU 
+BEGIN
+    POPUP "文件(&F)"
+    BEGIN
+        MENUITEM "新建(&N)\tCtrl+N",              ID_FILE_NEW
+        MENUITEM "打开(&O)...\tCtrl+O",           ID_FILE_OPEN
+        MENUITEM "关闭(&C)",                      ID_FILE_CLOSE
+        MENUITEM SEPARATOR
+        MENUITEM "打印设置(&R)...",                 ID_FILE_PRINT_SETUP
+        MENUITEM SEPARATOR
+        MENUITEM "最近的文件",                       ID_FILE_MRU_FILE1, GRAYED
+        MENUITEM SEPARATOR
+        MENUITEM "退出(&X)",                      ID_APP_EXIT
+    END
+    POPUP "视图(&V)"
+    BEGIN
+        MENUITEM "状态栏(&S)",                     ID_VIEW_STATUS_BAR
+        MENUITEM "标题栏(&C)",                     ID_VIEW_CAPTION_BAR
+        POPUP "应用程序外观(&A)"
+        BEGIN
+            MENUITEM "Windows 2000(&2)",            ID_VIEW_APPLOOK_WIN_2000
+            MENUITEM "Office XP(&X)",               ID_VIEW_APPLOOK_OFF_XP
+            MENUITEM "Windows XP(&W)",              ID_VIEW_APPLOOK_WIN_XP
+            MENUITEM "Office 2003(&3)",             ID_VIEW_APPLOOK_OFF_2003
+            MENUITEM "Visual Studio.NET 2005(&5)",  ID_VIEW_APPLOOK_VS_2005
+            POPUP "Office 2007(&7)"
+            BEGIN
+                MENUITEM "蓝色样式(&B)",                    ID_VIEW_APPLOOK_OFF_2007_BLUE
+                MENUITEM "黑色样式(&L)",                    ID_VIEW_APPLOOK_OFF_2007_BLACK
+                MENUITEM "银色样式(&S)",                    ID_VIEW_APPLOOK_OFF_2007_SILVER
+                MENUITEM "水绿色样式(&A)",                   ID_VIEW_APPLOOK_OFF_2007_AQUA
+            END
+        END
+    END
+    POPUP "帮助(&H)"
+    BEGIN
+        MENUITEM "关于 FieldTestTool(&A)...",     ID_APP_ABOUT
+    END
+END
+
+IDR_FieldTestToolTYPE MENU 
+BEGIN
+    POPUP "文件(&F)"
+    BEGIN
+        MENUITEM "新建(&N)\tCtrl+N",              ID_FILE_NEW
+        MENUITEM "打开(&O)...\tCtrl+O",           ID_FILE_OPEN
+        MENUITEM "关闭(&C)",                      ID_FILE_CLOSE
+        MENUITEM "保存(&S)\tCtrl+S",              ID_FILE_SAVE
+        MENUITEM "另存为(&A)...",                  ID_FILE_SAVE_AS
+        MENUITEM SEPARATOR
+        MENUITEM "打印(&P)...\tCtrl+P",           ID_FILE_PRINT
+        MENUITEM "打印预览(&V)",                    ID_FILE_PRINT_PREVIEW
+        MENUITEM "打印设置(&R)...",                 ID_FILE_PRINT_SETUP
+        MENUITEM SEPARATOR
+        MENUITEM "最近的文件",                       ID_FILE_MRU_FILE1, GRAYED
+        MENUITEM SEPARATOR
+        MENUITEM "退出(&X)",                      ID_APP_EXIT
+    END
+    POPUP "编辑(&E)"
+    BEGIN
+        MENUITEM "撤消(&U)\tCtrl+Z",              ID_EDIT_UNDO
+        MENUITEM SEPARATOR
+        MENUITEM "剪切(&T)\tCtrl+X",              ID_EDIT_CUT
+        MENUITEM "复制(&C)\tCtrl+C",              ID_EDIT_COPY
+        MENUITEM "粘贴(&P)\tCtrl+V",              ID_EDIT_PASTE
+    END
+    POPUP "视图(&V)"
+    BEGIN
+        MENUITEM "状态栏(&S)",                     ID_VIEW_STATUS_BAR
+        MENUITEM "标题栏(&C)",                     ID_VIEW_CAPTION_BAR
+        POPUP "应用程序外观(&A)"
+        BEGIN
+            MENUITEM "Windows 2000(&2)",            ID_VIEW_APPLOOK_WIN_2000
+            MENUITEM "Office XP(&X)",               ID_VIEW_APPLOOK_OFF_XP
+            MENUITEM "Windows XP(&W)",              ID_VIEW_APPLOOK_WIN_XP
+            MENUITEM "Office 2003(&3)",             ID_VIEW_APPLOOK_OFF_2003
+            MENUITEM "Visual Studio.NET 2005(&5)",  ID_VIEW_APPLOOK_VS_2005
+            POPUP "Office 2007(&7)"
+            BEGIN
+                MENUITEM "蓝色样式(&B)",                    ID_VIEW_APPLOOK_OFF_2007_BLUE
+                MENUITEM "黑色样式(&L)",                    ID_VIEW_APPLOOK_OFF_2007_BLACK
+                MENUITEM "银色样式(&S)",                    ID_VIEW_APPLOOK_OFF_2007_SILVER
+                MENUITEM "水绿色样式(&A)",                   ID_VIEW_APPLOOK_OFF_2007_AQUA
+            END
+        END
+    END
+    POPUP "窗口(&W)"
+    BEGIN
+        MENUITEM "新建窗口(&N)",                    ID_WINDOW_NEW
+    END
+    POPUP "帮助(&H)"
+    BEGIN
+        MENUITEM "关于 FieldTestTool(&A)...",     ID_APP_ABOUT
+    END
+END
+
+IDR_POPUP_EDIT MENU 
+BEGIN
+    POPUP "编辑"
+    BEGIN
+        MENUITEM "剪切(&T)\tCtrl+X",              ID_EDIT_CUT
+        MENUITEM "复制(&C)\tCtrl+C",              ID_EDIT_COPY
+        MENUITEM "粘贴(&P)\tCtrl+V",              ID_EDIT_PASTE
+    END
+END
+
+IDR_WINDOWS_MENU MENU 
+BEGIN
+    MENUITEM "新建窗口(&N)",                    ID_WINDOW_NEW
+END
+
+IDR_THEME_MENU MENU 
+BEGIN
+    MENUITEM "Office 2007 (蓝色样式)(&B)",      ID_VIEW_APPLOOK_OFF_2007_BLUE
+    MENUITEM "Office 2007 (黑色样式)(&L)",      ID_VIEW_APPLOOK_OFF_2007_BLACK
+    MENUITEM "Office 2007 (银色样式)(&S)",      ID_VIEW_APPLOOK_OFF_2007_SILVER
+    MENUITEM "Office 2007 (水绿色样式)(&A)",     ID_VIEW_APPLOOK_OFF_2007_AQUA
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDR_MAINFRAME ACCELERATORS 
+BEGIN
+    "N",            ID_FILE_NEW,            VIRTKEY, CONTROL
+    "O",            ID_FILE_OPEN,           VIRTKEY, CONTROL
+    "S",            ID_FILE_SAVE,           VIRTKEY, CONTROL
+    "P",            ID_FILE_PRINT,          VIRTKEY, CONTROL
+    "Z",            ID_EDIT_UNDO,           VIRTKEY, CONTROL
+    "X",            ID_EDIT_CUT,            VIRTKEY, CONTROL
+    "C",            ID_EDIT_COPY,           VIRTKEY, CONTROL
+    "V",            ID_EDIT_PASTE,          VIRTKEY, CONTROL
+    VK_BACK,        ID_EDIT_UNDO,           VIRTKEY, ALT
+    VK_DELETE,      ID_EDIT_CUT,            VIRTKEY, SHIFT
+    VK_INSERT,      ID_EDIT_COPY,           VIRTKEY, CONTROL
+    VK_INSERT,      ID_EDIT_PASTE,          VIRTKEY, SHIFT
+    VK_F6,          ID_NEXT_PANE,           VIRTKEY 
+    VK_F6,          ID_PREV_PANE,           VIRTKEY, SHIFT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "关于 FieldTestTool"
+FONT 9, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20
+    LTEXT           "FieldTestTool,1.0 版",IDC_STATIC,42,14,114,8,SS_NOPREFIX
+    LTEXT           "Copyright (C) 2021",IDC_STATIC,42,26,114,8
+    DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "080403a8"
+        BEGIN
+            VALUE "CompanyName", "Moka"
+            VALUE "FileDescription", "场测工具"
+            VALUE "FileVersion", "1.0.0.1"
+            VALUE "InternalName", "FieldTestTool.exe"
+            VALUE "LegalCopyright", "Jeff"
+            VALUE "OriginalFilename", "FieldTestTool.exe"
+            VALUE "ProductName", "场测工具"
+            VALUE "ProductVersion", "1.0.0.1"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x804, 936
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO 
+BEGIN
+    IDD_ABOUTBOX, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 163
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 55
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDP_OLE_INIT_FAILED     "OLE 初始化失败。请确保 OLE 库是正确的版本。"
+END
+
+STRINGTABLE 
+BEGIN
+    IDR_MAINFRAME           "FieldTestTool"
+    IDR_FieldTestToolTYPE   "\nFieldTestTool\nFieldTestTool\n\n\nFieldTestTool.Document\nFieldTestTool.Document"
+    IDS_WINDOWS_MANAGER     "窗口(&W)..."
+END
+
+STRINGTABLE 
+BEGIN
+    AFX_IDS_APP_TITLE       "FieldTestTool"
+    AFX_IDS_IDLEMESSAGE     "就绪"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_INDICATOR_EXT        "EXT"
+    ID_INDICATOR_CAPS       "CAP"
+    ID_INDICATOR_NUM        "NUM"
+    ID_INDICATOR_SCRL       "SCRL"
+    ID_INDICATOR_OVR        "OVR"
+    ID_INDICATOR_REC        "REC"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_FILE_NEW             "创建新文档\n新建"
+    ID_FILE_OPEN            "打开现有文档\n打开"
+    ID_FILE_CLOSE           "关闭活动文档\n关闭"
+    ID_FILE_SAVE            "保存活动文档\n保存"
+    ID_FILE_SAVE_AS         "用新名称保存活动文档\n另存为"
+    ID_FILE_PAGE_SETUP      "更改打印选项\n页面设置"
+    ID_FILE_PRINT_SETUP     "更改打印机选项和打印选项\n打印设置"
+    ID_FILE_PRINT           "打印活动文档\n打印"
+    ID_FILE_PRINT_DIRECT    "使用当前选项打印活动文档\n快速打印"
+    ID_FILE_PRINT_PREVIEW   "显示整页\n打印预览"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_APP_ABOUT            "显示程序信息、版本号和版权\n关于"
+    ID_APP_EXIT             "退出应用程序;提示保存文档\n退出"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_FILE_MRU_FILE1       "打开此文档"
+    ID_FILE_MRU_FILE2       "打开此文档"
+    ID_FILE_MRU_FILE3       "打开此文档"
+    ID_FILE_MRU_FILE4       "打开此文档"
+    ID_FILE_MRU_FILE5       "打开此文档"
+    ID_FILE_MRU_FILE6       "打开此文档"
+    ID_FILE_MRU_FILE7       "打开此文档"
+    ID_FILE_MRU_FILE8       "打开此文档"
+    ID_FILE_MRU_FILE9       "打开此文档"
+    ID_FILE_MRU_FILE10      "打开此文档"
+    ID_FILE_MRU_FILE11      "打开此文档"
+    ID_FILE_MRU_FILE12      "打开此文档"
+    ID_FILE_MRU_FILE13      "打开此文档"
+    ID_FILE_MRU_FILE14      "打开此文档"
+    ID_FILE_MRU_FILE15      "打开此文档"
+    ID_FILE_MRU_FILE16      "打开此文档"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_NEXT_PANE            "切换到下一个窗格\n下一窗格"
+    ID_PREV_PANE            "切换回上一个窗格\n上一窗格"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_WINDOW_NEW           "为活动文档打开另一个窗口\n新建窗口"
+    ID_WINDOW_ARRANGE       "在窗口底部排列图标\n排列图标"
+    ID_WINDOW_CASCADE       "以重叠方式排列窗口\n层叠窗口"
+    ID_WINDOW_TILE_HORZ     "以非重叠的平铺方式排列窗口\n平铺窗口"
+    ID_WINDOW_TILE_VERT     "以非重叠的平铺方式排列窗口\n平铺窗口"
+    ID_WINDOW_SPLIT         "将活动窗口拆分为多个窗格\n拆分"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_EDIT_CLEAR           "清除选定内容\n清除"
+    ID_EDIT_CLEAR_ALL       "清除全部内容\n全部清除"
+    ID_EDIT_COPY            "复制选定内容并将其放到剪贴板上\n复制"
+    ID_EDIT_CUT             "剪切选定内容并将其放到剪贴板上\n剪切"
+    ID_EDIT_FIND            "查找指定的文本\n查找"
+    ID_EDIT_PASTE           "插入剪贴板内容\n粘贴"
+    ID_EDIT_REPEAT          "重复上一操作\n重复"
+    ID_EDIT_REPLACE         "用其他文本替换特定的文本\n替换"
+    ID_EDIT_SELECT_ALL      "选定整个文档\n全选"
+    ID_EDIT_UNDO            "撤消上一操作\n撤消"
+    ID_EDIT_REDO            "恢复上次撤消的操作\n重做"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_VIEW_TOOLBAR         "显示或隐藏工具栏\n切换工具栏"
+    ID_VIEW_STATUS_BAR      "显示或隐藏状态栏\n切换状态栏"
+END
+
+STRINGTABLE 
+BEGIN
+    ID_VIEW_CAPTION_BAR     "显示或隐藏标题栏\n切换标题栏"
+END
+
+STRINGTABLE 
+BEGIN
+    AFX_IDS_SCSIZE          "更改窗口大小"
+    AFX_IDS_SCMOVE          "更改窗口位置"
+    AFX_IDS_SCMINIMIZE      "将窗口缩小为图标"
+    AFX_IDS_SCMAXIMIZE      "使窗口最大化显示"
+    AFX_IDS_SCNEXTWINDOW    "切换到下一个文档窗口"
+    AFX_IDS_SCPREVWINDOW    "切换到前一个文档窗口"
+    AFX_IDS_SCCLOSE         "关闭活动窗口并提示保存文档"
+END
+
+STRINGTABLE 
+BEGIN
+    AFX_IDS_SCRESTORE       "将窗口恢复到正常大小"
+    AFX_IDS_SCTASKLIST      "激活任务列表"
+    AFX_IDS_MDICHILD        "激活此窗口"
+END
+
+STRINGTABLE 
+BEGIN
+    AFX_IDS_PREVIEW_CLOSE   "关闭打印预览模式\n取消预览"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_STATUS_PANE1        "窗格 1"
+    IDS_STATUS_PANE2        "窗格 2"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_MYCALENDARS         "我的日历"
+    IDS_CALENDAR            "日历"
+    IDS_SHORTCUTS           "快捷方式"
+    IDS_FOLDERS             "文件夹"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_OUTLOOKBAR          "Outlook 栏"
+    IDS_RIBBON_FILE         "文件"
+    IDS_RIBBON_NEW          "新建(&N)"
+    IDS_RIBBON_OPEN         "打开(&O)..."
+    IDS_RIBBON_SAVE         "保存(&S)"
+    IDS_RIBBON_SAVEAS       "另存为(&A)..."
+    IDS_RIBBON_PRINT        "打印"
+    IDS_RIBBON_PRINT_LABEL  "预览并打印文档"
+    IDS_RIBBON_PRINT_QUICK  "快速打印(&Q)"
+    IDS_RIBBON_PRINT_PREVIEW "打印预览(&V)"
+    IDS_RIBBON_PRINT_SETUP  "打印设置(&U)"
+    IDS_RIBBON_CLOSE        "关闭(&C)"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_RIBBON_RECENT_DOCS  "最近使用的文档"
+    IDS_RIBBON_EXIT         "退出(&X)"
+    IDS_RIBBON_HOME         "主页(&H)"
+    IDS_RIBBON_CLIPBOARD    "剪贴板\nD"
+    IDS_RIBBON_PASTE        "粘贴\nV"
+    IDS_RIBBON_CUT          "剪切\nX"
+    IDS_RIBBON_COPY         "复制\nC"
+    IDS_RIBBON_SELECTALL    "全选\nA"
+    IDS_RIBBON_WINDOW       "窗口\nW"
+    IDS_RIBBON_WINDOWS      "窗口\nI"
+    IDS_RIBBON_STYLE        "样式"
+    IDS_RIBBON_STYLE_TIP    "修改视觉样式"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_RIBBON_STYLE_DESC   "选择一个 Office 2007 主题"
+    IDS_RIBBON_STATUSBAR    "状态栏"
+    IDS_RIBBON_VIEW         "视图"
+    IDS_RIBBON_CAPTIONBAR   "标题栏"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_CAPTION_BUTTON      "选项..."
+    IDS_CAPTION_BUTTON_TIP  "单击此处查看其他选项"
+    IDS_CAPTION_TEXT        "这是标题栏,可在其中向用户显示消息。"
+    IDS_CAPTION_IMAGE_TIP   "重要事项"
+    IDS_CAPTION_IMAGE_TEXT  "这是向用户显示的信息性消息。"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_EDIT_MENU           "编辑"
+END
+
+#endif    // 中文(中华人民共和国) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#define _AFX_NO_OLE_RESOURCES
+#define _AFX_NO_TRACKER_RESOURCES
+#define _AFX_NO_PROPERTY_RESOURCES
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+LANGUAGE 4, 2
+#pragma code_page(936)
+#include "res\FieldTestTool.rc2"  // 非 Microsoft Visual C++ 编辑的资源
+#include "l.CHS\afxres.rc"          // 标准组件
+#include "l.CHS\afxprint.rc"        // 打印/打印预览资源
+#if !defined(_AFXDLL)
+#include "l.CHS\afxribbon.rc"               // MFC 功能区和控件条资源
+#endif
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+

+ 364 - 0
FieldTestTool/FieldTestTool/FieldTestTool.vcproj

@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="FieldTestTool"
+	ProjectGUID="{E07BE121-625B-42ED-B75F-443ED3D296DF}"
+	RootNamespace="FieldTestTool"
+	Keyword="MFCProj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="..\..\..\..\bin\$(ProjectName)\"
+			IntermediateDirectory="$(OutDir)$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="2"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="false"
+				ValidateParameters="true"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="2052"
+				AdditionalIncludeDirectories="$(IntDir)"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="..\..\..\..\bin\$(ProjectName)\"
+			IntermediateDirectory="$(OutDir)$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="2"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="false"
+				ValidateParameters="true"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+				MinimalRebuild="false"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="2052"
+				AdditionalIncludeDirectories="$(IntDir)"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Ô´Îļþ"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\CalendarBar.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\ChildFrm.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestTool.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestToolDoc.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestToolView.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\MainFrm.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\stdafx.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Í·Îļþ"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\CalendarBar.h"
+				>
+			</File>
+			<File
+				RelativePath=".\ChildFrm.h"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestTool.h"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestToolDoc.h"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestToolView.h"
+				>
+			</File>
+			<File
+				RelativePath=".\MainFrm.h"
+				>
+			</File>
+			<File
+				RelativePath=".\Resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\stdafx.h"
+				>
+			</File>
+			<File
+				RelativePath=".\targetver.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="×ÊÔ´Îļþ"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath=".\res\buttons.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\FieldTestTool.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\FieldTestTool.rc"
+				>
+			</File>
+			<File
+				RelativePath=".\res\FieldTestTool.rc2"
+				>
+			</File>
+			<File
+				RelativePath=".\res\FieldTestToolDoc.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\filelarge.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\filesmall.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\info.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\main.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\nav_large.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\nav_large_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\pages.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\pages_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\pages_small.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\pages_small_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\Toolbar.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\Toolbar256.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\writelarge.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\writesmall.bmp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

+ 89 - 0
FieldTestTool/FieldTestTool/FieldTestToolDoc.cpp

@@ -0,0 +1,89 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// FieldTestToolDoc.cpp : CFieldTestToolDoc 类的实现
+//
+
+#include "stdafx.h"
+#include "FieldTestTool.h"
+
+#include "FieldTestToolDoc.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+
+// CFieldTestToolDoc
+
+IMPLEMENT_DYNCREATE(CFieldTestToolDoc, CDocument)
+
+BEGIN_MESSAGE_MAP(CFieldTestToolDoc, CDocument)
+END_MESSAGE_MAP()
+
+
+// CFieldTestToolDoc 构造/析构
+
+CFieldTestToolDoc::CFieldTestToolDoc()
+{
+	// TODO: 在此添加一次性构造代码
+
+}
+
+CFieldTestToolDoc::~CFieldTestToolDoc()
+{
+}
+
+BOOL CFieldTestToolDoc::OnNewDocument()
+{
+	if (!CDocument::OnNewDocument())
+		return FALSE;
+
+	// TODO: 在此添加重新初始化代码
+	// (SDI 文档将重用该文档)
+
+	return TRUE;
+}
+
+
+
+
+// CFieldTestToolDoc 序列化
+
+void CFieldTestToolDoc::Serialize(CArchive& ar)
+{
+	if (ar.IsStoring())
+	{
+		// TODO: 在此添加存储代码
+	}
+	else
+	{
+		// TODO: 在此添加加载代码
+	}
+}
+
+
+// CFieldTestToolDoc 诊断
+
+#ifdef _DEBUG
+void CFieldTestToolDoc::AssertValid() const
+{
+	CDocument::AssertValid();
+}
+
+void CFieldTestToolDoc::Dump(CDumpContext& dc) const
+{
+	CDocument::Dump(dc);
+}
+#endif //_DEBUG
+
+
+// CFieldTestToolDoc 命令

+ 51 - 0
FieldTestTool/FieldTestTool/FieldTestToolDoc.h

@@ -0,0 +1,51 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// FieldTestToolDoc.h : CFieldTestToolDoc 类的接口
+//
+
+
+#pragma once
+
+
+class CFieldTestToolDoc : public CDocument
+{
+protected: // 仅从序列化创建
+	CFieldTestToolDoc();
+	DECLARE_DYNCREATE(CFieldTestToolDoc)
+
+// 属性
+public:
+
+// 操作
+public:
+
+// 重写
+public:
+	virtual BOOL OnNewDocument();
+	virtual void Serialize(CArchive& ar);
+
+// 实现
+public:
+	virtual ~CFieldTestToolDoc();
+#ifdef _DEBUG
+	virtual void AssertValid() const;
+	virtual void Dump(CDumpContext& dc) const;
+#endif
+
+protected:
+
+// 生成的消息映射函数
+protected:
+	DECLARE_MESSAGE_MAP()
+};
+
+

+ 127 - 0
FieldTestTool/FieldTestTool/FieldTestToolView.cpp

@@ -0,0 +1,127 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// FieldTestToolView.cpp : CFieldTestToolView 类的实现
+//
+
+#include "stdafx.h"
+#include "FieldTestTool.h"
+
+#include "FieldTestToolDoc.h"
+#include "FieldTestToolView.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+
+// CFieldTestToolView
+
+IMPLEMENT_DYNCREATE(CFieldTestToolView, CView)
+
+BEGIN_MESSAGE_MAP(CFieldTestToolView, CView)
+	// 标准打印命令
+	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CFieldTestToolView::OnFilePrintPreview)
+END_MESSAGE_MAP()
+
+// CFieldTestToolView 构造/析构
+
+CFieldTestToolView::CFieldTestToolView()
+{
+	// TODO: 在此处添加构造代码
+
+}
+
+CFieldTestToolView::~CFieldTestToolView()
+{
+}
+
+BOOL CFieldTestToolView::PreCreateWindow(CREATESTRUCT& cs)
+{
+	// TODO: 在此处通过修改
+	//  CREATESTRUCT cs 来修改窗口类或样式
+
+	return CView::PreCreateWindow(cs);
+}
+
+// CFieldTestToolView 绘制
+
+void CFieldTestToolView::OnDraw(CDC* /*pDC*/)
+{
+	CFieldTestToolDoc* pDoc = GetDocument();
+	ASSERT_VALID(pDoc);
+	if (!pDoc)
+		return;
+
+	// TODO: 在此处为本机数据添加绘制代码
+}
+
+
+// CFieldTestToolView 打印
+
+
+void CFieldTestToolView::OnFilePrintPreview()
+{
+	AFXPrintPreview(this);
+}
+
+BOOL CFieldTestToolView::OnPreparePrinting(CPrintInfo* pInfo)
+{
+	// 默认准备
+	return DoPreparePrinting(pInfo);
+}
+
+void CFieldTestToolView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
+{
+	// TODO: 添加额外的打印前进行的初始化过程
+}
+
+void CFieldTestToolView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
+{
+	// TODO: 添加打印后进行的清理过程
+}
+
+void CFieldTestToolView::OnRButtonUp(UINT nFlags, CPoint point)
+{
+	ClientToScreen(&point);
+	OnContextMenu(this, point);
+}
+
+void CFieldTestToolView::OnContextMenu(CWnd* pWnd, CPoint point)
+{
+	theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
+}
+
+
+// CFieldTestToolView 诊断
+
+#ifdef _DEBUG
+void CFieldTestToolView::AssertValid() const
+{
+	CView::AssertValid();
+}
+
+void CFieldTestToolView::Dump(CDumpContext& dc) const
+{
+	CView::Dump(dc);
+}
+
+CFieldTestToolDoc* CFieldTestToolView::GetDocument() const // 非调试版本是内联的
+{
+	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFieldTestToolDoc)));
+	return (CFieldTestToolDoc*)m_pDocument;
+}
+#endif //_DEBUG
+
+
+// CFieldTestToolView 消息处理程序

+ 63 - 0
FieldTestTool/FieldTestTool/FieldTestToolView.h

@@ -0,0 +1,63 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// FieldTestToolView.h : CFieldTestToolView 类的接口
+//
+
+
+#pragma once
+
+
+class CFieldTestToolView : public CView
+{
+protected: // 仅从序列化创建
+	CFieldTestToolView();
+	DECLARE_DYNCREATE(CFieldTestToolView)
+
+// 属性
+public:
+	CFieldTestToolDoc* GetDocument() const;
+
+// 操作
+public:
+
+// 重写
+public:
+	virtual void OnDraw(CDC* pDC);  // 重写以绘制该视图
+	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
+protected:
+	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
+	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
+	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
+
+// 实现
+public:
+	virtual ~CFieldTestToolView();
+#ifdef _DEBUG
+	virtual void AssertValid() const;
+	virtual void Dump(CDumpContext& dc) const;
+#endif
+
+protected:
+
+// 生成的消息映射函数
+protected:
+	afx_msg void OnFilePrintPreview();
+	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
+	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
+	DECLARE_MESSAGE_MAP()
+};
+
+#ifndef _DEBUG  // FieldTestToolView.cpp 中的调试版本
+inline CFieldTestToolDoc* CFieldTestToolView::GetDocument() const
+   { return reinterpret_cast<CFieldTestToolDoc*>(m_pDocument); }
+#endif
+

+ 469 - 0
FieldTestTool/FieldTestTool/MainFrm.cpp

@@ -0,0 +1,469 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// MainFrm.cpp : CMainFrame 类的实现
+//
+
+#include "stdafx.h"
+#include "FieldTestTool.h"
+
+#include "MainFrm.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+// CMainFrame
+
+IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWndEx)
+
+const int  iMaxUserToolbars = 10;
+const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
+const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
+
+BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
+	ON_WM_CREATE()
+	ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
+	ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
+	ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
+#ifndef DISABLE_CAPTIONBAR
+    ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
+	ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
+#endif
+END_MESSAGE_MAP()
+
+// CMainFrame 构造/析构
+
+CMainFrame::CMainFrame()
+{
+	// TODO: 在此添加成员初始化代码
+	theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE);
+}
+
+CMainFrame::~CMainFrame()
+{
+}
+
+int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	BOOL bNameValid;
+	// 基于持久值设置视觉管理器和样式
+	OnApplicationLook(theApp.m_nAppLook);
+
+	CMDITabInfo mdiTabParams;
+	mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
+	mdiTabParams.m_bActiveTabCloseButton = TRUE;      // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
+	mdiTabParams.m_bTabIcons = FALSE;    // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
+	mdiTabParams.m_bAutoColor = TRUE;    // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
+	mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
+	EnableMDITabbedGroups(TRUE, mdiTabParams);
+
+	m_wndRibbonBar.Create(this);
+	InitializeRibbon();
+
+	if (!m_wndStatusBar.Create(this))
+	{
+		TRACE0("未能创建状态栏\n");
+		return -1;      // 未能创建
+	}
+
+	CString strTitlePane1;
+	CString strTitlePane2;
+	bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
+	ASSERT(bNameValid);
+	bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
+	ASSERT(bNameValid);
+	m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
+	m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
+
+	// 启用 Visual Studio 2005 样式停靠窗口行为
+	CDockingManager::SetDockingMode(DT_SMART);
+	// 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
+	EnableAutoHidePanes(CBRS_ALIGN_ANY);
+
+	// 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
+	EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
+
+	// 创建并设置“Outlook”导航栏:
+	if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
+	{
+		TRACE0("未能创建导航窗格\n");
+		return -1;      // 未能创建
+	}
+
+#ifndef DISABLE_CAPTIONBAR
+	// 创建标题栏:
+	if (!CreateCaptionBar())
+	{
+		TRACE0("未能创建标题栏\n");
+		return -1;      // 未能创建
+	}
+#endif
+
+	// 已创建 Outlook 栏,应允许在左侧停靠。
+	EnableDocking(CBRS_ALIGN_LEFT);
+	EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
+
+	// 启用增强的窗口管理对话框
+	EnableWindowsDialog(ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE);
+
+	return 0;
+}
+
+BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
+{
+	if( !CMDIFrameWndEx::PreCreateWindow(cs) )
+		return FALSE;
+	// TODO: 在此处通过修改
+	//  CREATESTRUCT cs 来修改窗口类或样式
+
+	return TRUE;
+}
+
+void CMainFrame::InitializeRibbon()
+{
+	BOOL bNameValid;
+
+	CString strTemp;
+	bNameValid = strTemp.LoadString(IDS_RIBBON_FILE);
+	ASSERT(bNameValid);
+
+	// 加载面板图像:
+	m_PanelImages.SetImageSize(CSize(16, 16));
+	m_PanelImages.Load(IDB_BUTTONS);
+
+	// 初始主按钮:
+	m_MainButton.SetImage(IDB_MAIN);
+	m_MainButton.SetText(_T("\nf"));
+	m_MainButton.SetToolTipText(strTemp);
+
+	m_wndRibbonBar.SetApplicationButton(&m_MainButton, CSize (45, 45));
+	CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_NEW);
+	ASSERT(bNameValid);
+	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, strTemp, 0, 0));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_OPEN);
+	ASSERT(bNameValid);
+	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_OPEN, strTemp, 1, 1));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_SAVE);
+	ASSERT(bNameValid);
+	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE, strTemp, 2, 2));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_SAVEAS);
+	ASSERT(bNameValid);
+	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE_AS, strTemp, 3, 3));
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT);
+	ASSERT(bNameValid);
+	CMFCRibbonButton* pBtnPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6, 6);
+	pBtnPrint->SetKeys(_T("p"), _T("w"));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_LABEL);
+	ASSERT(bNameValid);
+	pBtnPrint->AddSubItem(new CMFCRibbonLabel(strTemp));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_QUICK);
+	ASSERT(bNameValid);
+	pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_DIRECT, strTemp, 7, 7, TRUE));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_PREVIEW);
+	ASSERT(bNameValid);
+	pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_PREVIEW, strTemp, 8, 8, TRUE));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_SETUP);
+	ASSERT(bNameValid);
+	pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_SETUP, strTemp, 11, 11, TRUE));
+	pMainPanel->Add(pBtnPrint);
+	pMainPanel->Add(new CMFCRibbonSeparator(TRUE));
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_CLOSE);
+	ASSERT(bNameValid);
+	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_CLOSE, strTemp, 9, 9));
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_RECENT_DOCS);
+	ASSERT(bNameValid);
+	pMainPanel->AddRecentFilesList(strTemp);
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_EXIT);
+	ASSERT(bNameValid);
+	pMainPanel->AddToBottom(new CMFCRibbonMainPanelButton(ID_APP_EXIT, strTemp, 15));
+
+	// 为“剪贴板”面板添加“主”类别:
+	bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
+	ASSERT(bNameValid);
+	CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
+
+	// 创建“剪贴板”面板:
+	bNameValid = strTemp.LoadString(IDS_RIBBON_CLIPBOARD);
+	ASSERT(bNameValid);
+	CMFCRibbonPanel* pPanelClipboard = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(27));
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_PASTE);
+	ASSERT(bNameValid);
+	CMFCRibbonButton* pBtnPaste = new CMFCRibbonButton(ID_EDIT_PASTE, strTemp, 0, 0);
+	pPanelClipboard->Add(pBtnPaste);
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_CUT);
+	ASSERT(bNameValid);
+	pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_CUT, strTemp, 1));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_COPY);
+	ASSERT(bNameValid);
+	pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_COPY, strTemp, 2));
+	bNameValid = strTemp.LoadString(IDS_RIBBON_SELECTALL);
+	ASSERT(bNameValid);
+	pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_SELECT_ALL, strTemp, -1));
+
+	// 创建和添加“视图”面板:
+	bNameValid = strTemp.LoadString(IDS_RIBBON_VIEW);
+	ASSERT(bNameValid);
+	CMFCRibbonPanel* pPanelView = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_STATUSBAR);
+	ASSERT(bNameValid);
+	CMFCRibbonButton* pBtnStatusBar = new CMFCRibbonCheckBox(ID_VIEW_STATUS_BAR, strTemp);
+	pPanelView->Add(pBtnStatusBar);
+	bNameValid = strTemp.LoadString(IDS_RIBBON_CAPTIONBAR);
+	ASSERT(bNameValid);
+	CMFCRibbonButton* pBtnCaptionBar = new CMFCRibbonCheckBox(ID_VIEW_CAPTION_BAR, strTemp);
+	pPanelView->Add(pBtnCaptionBar);
+
+	// 创建和添加“窗口”面板:
+	bNameValid = strTemp.LoadString(IDS_RIBBON_WINDOW);
+	ASSERT(bNameValid);
+	CMFCRibbonPanel* pPanelWindow = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_WINDOWS);
+	ASSERT(bNameValid);
+	CMFCRibbonButton* pBtnWindows = new CMFCRibbonButton(ID_WINDOW_MANAGER, strTemp, -1, 1);
+	pBtnWindows->SetMenu(IDR_WINDOWS_MENU, TRUE);
+	pPanelWindow->Add(pBtnWindows);
+
+	// 将元素添加到选项卡右侧:
+	bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE);
+	ASSERT(bNameValid);
+	CMFCRibbonButton* pVisualStyleButton = new CMFCRibbonButton(-1, strTemp, -1, -1);
+
+	pVisualStyleButton->SetMenu(IDR_THEME_MENU, FALSE /* 无默认命令*/, TRUE /* 右对齐*/);
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_TIP);
+	ASSERT(bNameValid);
+	pVisualStyleButton->SetToolTipText(strTemp);
+	bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_DESC);
+	ASSERT(bNameValid);
+	pVisualStyleButton->SetDescription(strTemp);
+	m_wndRibbonBar.AddToTabs(pVisualStyleButton);
+
+#ifndef DISABLE_QUICKACCESS
+	// 添加快速访问工具栏命令:
+	CList<UINT, UINT> lstQATCmds;
+
+	lstQATCmds.AddTail(ID_FILE_NEW);
+	lstQATCmds.AddTail(ID_FILE_OPEN);
+	lstQATCmds.AddTail(ID_FILE_SAVE);
+	lstQATCmds.AddTail(ID_FILE_PRINT_DIRECT);
+	m_wndRibbonBar.SetQuickAccessCommands(lstQATCmds);
+#endif
+
+	m_wndRibbonBar.AddToTabs(new CMFCRibbonButton(ID_APP_ABOUT, _T("\na"), m_PanelImages.ExtractIcon (0)));
+
+}
+
+BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
+{
+	CWindowDC dc(NULL);
+
+	bar.SetMode2003();
+
+	BOOL bNameValid;
+	CString strTemp;
+	bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
+	ASSERT(bNameValid);
+	if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
+	{
+		return FALSE; // 未能创建
+	}
+
+	CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
+
+	if (pOutlookBar == NULL)
+	{
+		ASSERT(FALSE);
+		return FALSE;
+	}
+
+	pOutlookBar->EnableInPlaceEdit(TRUE);
+
+	static UINT uiPageID = 1;
+
+	DWORD dwPaneStyle = AFX_DEFAULT_TOOLBAR_STYLE | CBRS_FLOAT_MULTI;
+
+	// 可浮动,可自动隐藏,可调整大小,但不能关闭
+	DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
+
+	CRect rectDummy(0, 0, 0, 0);
+	const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
+
+	tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
+	bNameValid = strTemp.LoadString(IDS_FOLDERS);
+	ASSERT(bNameValid);
+	pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);
+
+	calendar.Create(rectDummy, &bar, 1201);
+	bNameValid = strTemp.LoadString(IDS_CALENDAR);
+	ASSERT(bNameValid);
+	pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
+
+	bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
+
+	pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
+	pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
+	pOutlookBar->RecalcLayout();
+
+	BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
+	CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
+
+	bar.SetButtonsFont(&afxGlobalData.fontBold);
+
+	return TRUE;
+}
+
+#ifndef DISABLE_CAPTIONBAR
+BOOL CMainFrame::CreateCaptionBar()
+{
+	if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE))
+	{
+		TRACE0("未能创建标题栏\n");
+		return FALSE;
+	}
+
+	BOOL bNameValid;
+
+	CString strTemp, strTemp2;
+	bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON);
+	ASSERT(bNameValid);
+	m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE);
+	bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP);
+	ASSERT(bNameValid);
+	m_wndCaptionBar.SetButtonToolTip(strTemp);
+
+	bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT);
+	ASSERT(bNameValid);
+	m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT);
+
+	m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT);
+	bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP);
+	ASSERT(bNameValid);
+	bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT);
+	ASSERT(bNameValid);
+	m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2);
+
+	return TRUE;
+}
+#endif
+
+// CMainFrame 诊断
+
+#ifdef _DEBUG
+void CMainFrame::AssertValid() const
+{
+	CMDIFrameWndEx::AssertValid();
+}
+
+void CMainFrame::Dump(CDumpContext& dc) const
+{
+	CMDIFrameWndEx::Dump(dc);
+}
+#endif //_DEBUG
+
+
+// CMainFrame 消息处理程序
+
+void CMainFrame::OnWindowManager()
+{
+	ShowWindowsDialog();
+}
+
+void CMainFrame::OnApplicationLook(UINT id)
+{
+	CWaitCursor wait;
+
+	theApp.m_nAppLook = id;
+
+	switch (theApp.m_nAppLook)
+	{
+	case ID_VIEW_APPLOOK_WIN_2000:
+		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
+		break;
+
+	case ID_VIEW_APPLOOK_OFF_XP:
+		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
+		break;
+
+	case ID_VIEW_APPLOOK_WIN_XP:
+		CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
+		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
+		break;
+
+	case ID_VIEW_APPLOOK_OFF_2003:
+		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
+		CDockingManager::SetDockingMode(DT_SMART);
+		break;
+
+	case ID_VIEW_APPLOOK_VS_2005:
+		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
+		CDockingManager::SetDockingMode(DT_SMART);
+		break;
+
+	default:
+		switch (theApp.m_nAppLook)
+		{
+		case ID_VIEW_APPLOOK_OFF_2007_BLUE:
+			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
+			break;
+
+		case ID_VIEW_APPLOOK_OFF_2007_BLACK:
+			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
+			break;
+
+		case ID_VIEW_APPLOOK_OFF_2007_SILVER:
+			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
+			break;
+
+		case ID_VIEW_APPLOOK_OFF_2007_AQUA:
+			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
+			break;
+		}
+
+		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
+		CDockingManager::SetDockingMode(DT_SMART);
+	}
+
+	RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
+
+	theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
+}
+
+void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
+{
+	pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
+}
+
+#ifndef DISABLE_CAPTIONBAR
+void CMainFrame::OnViewCaptionBar()
+{
+	m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
+	RecalcLayout(FALSE);
+}
+
+void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
+{
+	pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
+}
+#endif

+ 84 - 0
FieldTestTool/FieldTestTool/MainFrm.h

@@ -0,0 +1,84 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// MainFrm.h : CMainFrame 类的接口
+//
+
+#pragma once
+#include "CalendarBar.h"
+#include "Resource.h"
+
+class COutlookBar : public CMFCOutlookBar
+{
+	virtual BOOL AllowShowOnPaneMenu() const { return TRUE; }
+	virtual void GetPaneName(CString& strName) const { BOOL bNameValid = strName.LoadString(IDS_OUTLOOKBAR); ASSERT(bNameValid); }
+};
+
+class CMainFrame : public CMDIFrameWndEx
+{
+	DECLARE_DYNAMIC(CMainFrame)
+public:
+	CMainFrame();
+
+// 属性
+public:
+
+// 操作
+public:
+
+// 重写
+public:
+	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
+
+// 实现
+public:
+	virtual ~CMainFrame();
+#ifdef _DEBUG
+	virtual void AssertValid() const;
+	virtual void Dump(CDumpContext& dc) const;
+#endif
+
+protected:  // 控件条嵌入成员
+	CMFCRibbonBar     m_wndRibbonBar;
+	CMFCRibbonApplicationButton m_MainButton;
+	CMFCToolBarImages m_PanelImages;
+	CMFCRibbonStatusBar  m_wndStatusBar;
+	COutlookBar       m_wndNavigationBar;
+	CMFCShellTreeCtrl m_wndTree;
+	CCalendarBar      m_wndCalendar;
+#ifndef DISABLE_CAPTIONBAR
+	CMFCCaptionBar    m_wndCaptionBar;
+#endif
+
+// 生成的消息映射函数
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnWindowManager();
+	afx_msg void OnApplicationLook(UINT id);
+	afx_msg void OnUpdateApplicationLook(CCmdUI* pCmdUI);
+#ifndef DISABLE_CAPTIONBAR
+	afx_msg void OnViewCaptionBar();
+	afx_msg void OnUpdateViewCaptionBar(CCmdUI* pCmdUI);
+#endif
+	DECLARE_MESSAGE_MAP()
+
+	void InitializeRibbon();
+	BOOL CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth);
+	BOOL CreateCaptionBar();
+
+	int FindFocusedOutlookWnd(CMFCOutlookBarTabCtrl** ppOutlookWnd);
+
+	CMFCOutlookBarTabCtrl* FindOutlookParent(CWnd* pWnd);
+	CMFCOutlookBarTabCtrl* m_pCurrOutlookWnd;
+	CMFCOutlookBarPane*    m_pCurrOutlookPage;
+};
+
+

+ 96 - 0
FieldTestTool/FieldTestTool/ReadMe.txt

@@ -0,0 +1,96 @@
+================================================================================
+    MICROSOFT 基础类库: FieldTestTool 项目概述
+===============================================================================
+
+应用程序向导已为您创建此 FieldTestTool 应用程序。此应用程序不仅演示使用 Microsoft 基础类的基本知识,而且可作为编写应用程序的起点。
+
+此文件包含组成 FieldTestTool 应用程序的各个文件的内容摘要。
+
+FieldTestTool.vcproj
+    这是使用应用程序向导生成的 VC++ 项目的主项目文件。
+    它包含有关生成文件的 Visual C++ 版本的信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
+
+FieldTestTool.h
+    这是应用程序的主要头文件。它包括其他项目特定的头文件(包括 Resource.h),并声明 CFieldTestToolApp 应用程序类。
+
+FieldTestTool.cpp
+    这是包含应用程序类 CFieldTestToolApp 的主要应用程序源文件。
+
+FieldTestTool.rc
+    这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。项目资源位于 2052 中。
+
+res\FieldTestTool.ico
+    这是用作应用程序图标的图标文件。此图标包括在主要资源文件 FieldTestTool.rc 中。
+
+res\FieldTestTool.rc2
+    此文件包含不是由 Microsoft Visual C++ 编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。
+
+/////////////////////////////////////////////////////////////////////////////
+
+对于主框架窗口:
+    项目包含标准 MFC 界面。
+
+MainFrm.h, MainFrm.cpp
+    这些文件包含框架类 CMainFrame,该类派生自
+    CMDIFrameWnd 并控制所有 MDI 框架功能。
+
+res\Toolbar.bmp
+    此位图文件用于为工具栏创建平铺图像。
+    初始工具栏和状态栏是在 CMainFrame 类中构造的。使用资源编辑器编辑此工具栏位图,并更新 FieldTestTool.rc 中的 IDR_MAINFRAME TOOLBAR 数组以添加工具栏按钮。
+/////////////////////////////////////////////////////////////////////////////
+
+对于子框架窗口:
+
+ChildFrm.h, ChildFrm.cpp
+    这些文件定义并实现 CChildFrame 类,该类支持 MDI 应用程序中的子窗口。
+
+/////////////////////////////////////////////////////////////////////////////
+
+应用程序向导创建一个文档类型和一个视图:
+
+FieldTestToolDoc.h,FieldTestToolDoc.cpp - 文档
+    这些文件包含 CFieldTestToolDoc 类。编辑这些文件可以添加特殊文档数据并可实现文件保存和加载(通过 CFieldTestToolDoc::Serialize)。
+
+FieldTestToolView.h,FieldTestToolView.cpp - 文档的视图
+    这些文件包含 CFieldTestToolView 类。
+    CFieldTestToolView 对象用于查看 CFieldTestToolDoc 对象。
+
+res\FieldTestToolDoc.ico
+    这是图标文件,它用作 CFieldTestToolDoc 类的 MDI 子窗口的图标。此图标包括在主要资源文件 FieldTestTool.rc 中。
+
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+其他功能:
+
+ActiveX 控件
+    应用程序包括对使用 ActiveX 控件的支持。
+
+打印及打印预览支持
+    应用程序向导已通过从 MFC 库调用 CView 类中的成员函数,生成了用于处理打印、打印设置和打印预览命令的代码。
+
+/////////////////////////////////////////////////////////////////////////////
+
+其他标准文件:
+
+StdAfx.h, StdAfx.cpp
+    这些文件用于生成名为 FieldTestTool.pch 的预编译头(PCH)文件和名为 StdAfx.obj 的预编译类型文件。
+
+Resource.h
+    这是标准头文件,它定义新资源 ID。
+    Microsoft Visual C++ 将读取并更新此文件。
+
+FieldTestTool.manifest
+	Windows XP 使用应用程序清单文件描述应用程序	对特定版本并行程序集的依赖性。加载程序使用此	信息从程序集缓存加载相应程序集或	从应用程序加载私有信息。应用程序清单可能作为	与应用程序可执行文件安装在同一文件夹中的外部 .manifest 文件包括在内以便重新发布,	也可能以资源的形式包括在该可执行文件中。
+/////////////////////////////////////////////////////////////////////////////
+
+其他注释:
+
+应用程序向导使用“TODO:”指示应添加或自定义的源代码部分。
+
+如果应用程序在共享 DLL 中使用 MFC,则将需要重新发布 MFC DLL。如果应用程序所用与操作系统的区域设置不同,则也将必须重新发布对应的本地化资源 MFC90XXX.DLL。
+有关这两个主题的详细信息,请参阅 MSDN 文档中有关重新发布 Visual C++ 应用程序的部分。
+
+/////////////////////////////////////////////////////////////////////////////

+ 95 - 0
FieldTestTool/FieldTestTool/Resource.h

@@ -0,0 +1,95 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by FieldTestTool.rc
+//
+#define IDR_PASTE_MENU				151
+#define IDR_WINDOWS_MENU			152
+#define IDD_ABOUTBOX				100
+#define IDP_OLE_INIT_FAILED			100
+#define ID_WRITE_PASTEASHYPERLINK	32770
+#define IDB_WRITESMALL				110
+#define IDB_WRITELARGE				111
+#define IDB_MAIN					112
+#define IDB_BUTTONS					113
+#define IDB_FILELARGE				114
+#define IDB_FILESMALL				115
+#define IDR_POPUP_EDIT				119
+#define ID_STATUSBAR_PANE1			120
+#define ID_STATUSBAR_PANE2			121
+#define IDS_STATUS_PANE1			122
+#define IDS_STATUS_PANE2			123
+#define IDR_MAINFRAME				128
+#define IDR_MAINFRAME_256			129
+#define IDR_FieldTestToolTYPE				130
+#define ID_WINDOW_MANAGER			131
+#define IDS_WINDOWS_MANAGER			132
+#define ID_VIEW_NAVIGATION			185
+#define IDB_NAVIGATION_LARGE		186
+#define IDB_NAVIGATION_LARGE_HC		187
+#define IDB_PAGES					188
+#define IDB_PAGES_HC				189
+#define IDB_PAGES_SMALL				190
+#define IDB_PAGES_SMALL_HC			191
+#define IDR_THEME_MENU				200
+#define ID_SET_STYLE				201
+#define ID_VIEW_APPLOOK_WIN_2000	210
+#define ID_VIEW_APPLOOK_OFF_XP		211
+#define ID_VIEW_APPLOOK_WIN_XP		212
+#define ID_VIEW_APPLOOK_OFF_2003	213
+#define ID_VIEW_APPLOOK_VS_2005		214
+#define ID_VIEW_APPLOOK_OFF_2007_BLUE	215
+#define ID_VIEW_APPLOOK_OFF_2007_BLACK	216
+#define ID_VIEW_APPLOOK_OFF_2007_SILVER	217
+#define ID_VIEW_APPLOOK_OFF_2007_AQUA	218
+#define ID_TOOLS_OPTIONS			220
+#define ID_VIEW_CAPTION_BAR			221
+#define IDB_INFO					230
+#define IDS_CAPTION_BUTTON			231
+#define IDS_CAPTION_BUTTON_TIP		232
+#define IDS_CAPTION_TEXT			233
+#define IDS_CAPTION_IMAGE_TIP		234
+#define IDS_CAPTION_IMAGE_TEXT		235
+#define IDS_MYCALENDARS				250
+#define IDS_CALENDAR				251
+#define IDS_SHORTCUTS				252
+#define IDS_FOLDERS					253
+#define IDS_OUTLOOKBAR				258
+#define IDS_RIBBON_FILE				260
+#define IDS_RIBBON_NEW				262
+#define IDS_RIBBON_OPEN				263
+#define IDS_RIBBON_SAVE				264
+#define IDS_RIBBON_SAVEAS			265
+#define IDS_RIBBON_PRINT			266
+#define IDS_RIBBON_PRINT_LABEL		267
+#define IDS_RIBBON_PRINT_QUICK		268
+#define IDS_RIBBON_PRINT_PREVIEW	269
+#define IDS_RIBBON_PRINT_SETUP		270
+#define IDS_RIBBON_CLOSE			271
+#define IDS_RIBBON_RECENT_DOCS		272
+#define IDS_RIBBON_EXIT				273
+#define IDS_RIBBON_HOME				274
+#define IDS_RIBBON_CLIPBOARD		275
+#define IDS_RIBBON_PASTE			276
+#define IDS_RIBBON_CUT				277
+#define IDS_RIBBON_COPY				278
+#define IDS_RIBBON_SELECTALL		279
+#define IDS_RIBBON_WINDOW			284
+#define IDS_RIBBON_WINDOWS			285
+#define IDS_RIBBON_STYLE			286
+#define IDS_RIBBON_STYLE_TIP		287
+#define IDS_RIBBON_STYLE_DESC		288
+#define IDS_RIBBON_STATUSBAR		289
+#define IDS_RIBBON_VIEW				290
+#define IDS_RIBBON_CAPTIONBAR		295
+#define IDS_EDIT_MENU				306
+
+// жÔÏóµÄÏÂÒ»×éĬÈÏÖµ
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE	310
+#define _APS_NEXT_CONTROL_VALUE		1000
+#define _APS_NEXT_SYMED_VALUE		310
+#define _APS_NEXT_COMMAND_VALUE		32771
+#endif
+#endif

BIN
FieldTestTool/FieldTestTool/res/FieldTestTool.ico


+ 13 - 0
FieldTestTool/FieldTestTool/res/FieldTestTool.rc2

@@ -0,0 +1,13 @@
+//
+// FieldTestTool.RC2 - Microsoft Visual C++ 不会直接编辑的资源
+//
+
+#ifdef APSTUDIO_INVOKED
+#error 此文件不能用 Microsoft Visual C++ 编辑
+#endif //APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+// 在此处添加手动编辑的资源...
+
+/////////////////////////////////////////////////////////////////////////////

BIN
FieldTestTool/FieldTestTool/res/FieldTestToolDoc.ico


BIN
FieldTestTool/FieldTestTool/res/Toolbar.bmp


BIN
FieldTestTool/FieldTestTool/res/Toolbar256.bmp


BIN
FieldTestTool/FieldTestTool/res/buttons.bmp


BIN
FieldTestTool/FieldTestTool/res/filelarge.bmp


BIN
FieldTestTool/FieldTestTool/res/filesmall.bmp


BIN
FieldTestTool/FieldTestTool/res/info.bmp


BIN
FieldTestTool/FieldTestTool/res/main.bmp


BIN
FieldTestTool/FieldTestTool/res/nav_large.bmp


BIN
FieldTestTool/FieldTestTool/res/nav_large_hc.bmp


BIN
FieldTestTool/FieldTestTool/res/pages.bmp


BIN
FieldTestTool/FieldTestTool/res/pages_hc.bmp


BIN
FieldTestTool/FieldTestTool/res/pages_small.bmp


BIN
FieldTestTool/FieldTestTool/res/pages_small_hc.bmp


BIN
FieldTestTool/FieldTestTool/res/writelarge.bmp


BIN
FieldTestTool/FieldTestTool/res/writesmall.bmp


+ 18 - 0
FieldTestTool/FieldTestTool/stdafx.cpp

@@ -0,0 +1,18 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// stdafx.cpp : 只包括标准包含文件的源文件
+// FieldTestTool.pch 将作为预编译头
+// stdafx.obj 将包含预编译类型信息
+
+#include "stdafx.h"
+
+

+ 73 - 0
FieldTestTool/FieldTestTool/stdafx.h

@@ -0,0 +1,73 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// stdafx.h : 标准系统包含文件的包含文件,
+// 或是经常使用但不常更改的
+// 特定于项目的包含文件
+
+#pragma once
+
+#ifndef _SECURE_ATL
+#define _SECURE_ATL 1
+#endif
+
+#ifndef VC_EXTRALEAN
+#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
+#endif
+
+#include "targetver.h"
+
+#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的
+
+// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
+#define _AFX_ALL_WARNINGS
+
+#include <afxwin.h>         // MFC 核心组件和标准组件
+#include <afxext.h>         // MFC 扩展
+
+
+#include <afxdisp.h>        // MFC 自动化类
+
+
+
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
+#endif
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支持
+
+
+
+// 禁用标题栏;
+#define DISABLE_CAPTIONBAR
+// 禁用快速启动栏;
+#define DISABLE_QUICKACCESS
+// 禁止启动创建文档;
+#define DISABLE_NEWFILE
+
+
+
+#ifdef _UNICODE
+#if defined _M_IX86
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#elif defined _M_IA64
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#elif defined _M_X64
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#else
+#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#endif
+#endif
+
+

+ 36 - 0
FieldTestTool/FieldTestTool/targetver.h

@@ -0,0 +1,36 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+// 以下宏定义要求的最低平台。要求的最低平台
+// 是具有运行应用程序所需功能的 Windows、Internet Explorer 等产品的
+// 最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以
+// 正常工作。
+
+// 如果必须要针对低于以下指定版本的平台,请修改下列定义。
+// 有关不同平台对应值的最新信息,请参考 MSDN。
+#ifndef WINVER                          // 指定要求的最低平台是 Windows Vista。
+#define WINVER 0x0600           // 将此值更改为相应的值,以适用于 Windows 的其他版本。
+#endif
+
+#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
+#define _WIN32_WINNT 0x0600     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
+#endif
+
+#ifndef _WIN32_WINDOWS          // 指定要求的最低平台是 Windows 98。
+#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值,以适用于 Windows Me 或更高版本。
+#endif
+
+#ifndef _WIN32_IE                       // 指定要求的最低平台是 Internet Explorer 7.0。
+#define _WIN32_IE 0x0700        // 将此值更改为相应的值,以适用于 IE 的其他版本。
+#endif
+