Jelajahi Sumber

添加主程序

Jeff 3 tahun lalu
induk
melakukan
289bb1c15a
69 mengubah file dengan 4617 tambahan dan 0 penghapusan
  1. 20 0
      Source/OGCAssistTool/OGCAssistTool.sln
  2. 153 0
      Source/OGCAssistTool/OGCAssistTool/CalendarBar.cpp
  3. 44 0
      Source/OGCAssistTool/OGCAssistTool/CalendarBar.h
  4. 332 0
      Source/OGCAssistTool/OGCAssistTool/ClassView.cpp
  5. 64 0
      Source/OGCAssistTool/OGCAssistTool/ClassView.h
  6. 96 0
      Source/OGCAssistTool/OGCAssistTool/DlgLogin.cpp
  7. 24 0
      Source/OGCAssistTool/OGCAssistTool/DlgLogin.h
  8. 266 0
      Source/OGCAssistTool/OGCAssistTool/FileView.cpp
  9. 65 0
      Source/OGCAssistTool/OGCAssistTool/FileView.h
  10. 618 0
      Source/OGCAssistTool/OGCAssistTool/MainFrm.cpp
  11. 97 0
      Source/OGCAssistTool/OGCAssistTool/MainFrm.h
  12. 204 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.cpp
  13. 49 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.h
  14. 666 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.rc
  15. 492 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.vcproj
  16. 89 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistToolDoc.cpp
  17. 51 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistToolDoc.h
  18. 127 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistToolView.cpp
  19. 63 0
      Source/OGCAssistTool/OGCAssistTool/OGCAssistToolView.h
  20. 208 0
      Source/OGCAssistTool/OGCAssistTool/OutputWnd.cpp
  21. 69 0
      Source/OGCAssistTool/OGCAssistTool/OutputWnd.h
  22. 279 0
      Source/OGCAssistTool/OGCAssistTool/PropertiesWnd.cpp
  23. 70 0
      Source/OGCAssistTool/OGCAssistTool/PropertiesWnd.h
  24. 87 0
      Source/OGCAssistTool/OGCAssistTool/ReadMe.txt
  25. 51 0
      Source/OGCAssistTool/OGCAssistTool/ViewTree.cpp
  26. 33 0
      Source/OGCAssistTool/OGCAssistTool/ViewTree.h
  27. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/OGCAssistTool.ico
  28. 13 0
      Source/OGCAssistTool/OGCAssistTool/res/OGCAssistTool.rc2
  29. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/OGCAssistToolDoc.ico
  30. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/Toolbar.bmp
  31. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/Toolbar256.bmp
  32. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/buttons.bmp
  33. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/class_view.ico
  34. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/class_view_hc.ico
  35. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/classview.bmp
  36. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/classview_hc.bmp
  37. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/explorer.bmp
  38. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/explorer_hc.bmp
  39. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/file_view.ico
  40. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/file_view_hc.ico
  41. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/filelarge.bmp
  42. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/filesmall.bmp
  43. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/fileview.bmp
  44. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/fileview_hc.bmp
  45. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/info.bmp
  46. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/logo.bmp
  47. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/main.bmp
  48. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/menuimages.bmp
  49. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/menuimages_hc.bmp
  50. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/nav_large.bmp
  51. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/nav_large_hc.bmp
  52. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/output_wnd.ico
  53. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/output_wnd_hc.ico
  54. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/pages.bmp
  55. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/pages_hc.bmp
  56. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/pages_small.bmp
  57. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/pages_small_hc.bmp
  58. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/properties.bmp
  59. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/properties_hc.bmp
  60. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/properties_wnd.ico
  61. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/properties_wnd_hc.ico
  62. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/sort.bmp
  63. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/sort_hc.bmp
  64. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/writelarge.bmp
  65. TEMPAT SAMPAH
      Source/OGCAssistTool/OGCAssistTool/res/writesmall.bmp
  66. 156 0
      Source/OGCAssistTool/OGCAssistTool/resource.h
  67. 18 0
      Source/OGCAssistTool/OGCAssistTool/stdafx.cpp
  68. 77 0
      Source/OGCAssistTool/OGCAssistTool/stdafx.h
  69. 36 0
      Source/OGCAssistTool/OGCAssistTool/targetver.h

+ 20 - 0
Source/OGCAssistTool/OGCAssistTool.sln

@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OGCAssistTool", "OGCAssistTool\OGCAssistTool.vcproj", "{01D481C5-7859-43F9-B224-219E8AD4A10C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{01D481C5-7859-43F9-B224-219E8AD4A10C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{01D481C5-7859-43F9-B224-219E8AD4A10C}.Debug|Win32.Build.0 = Debug|Win32
+		{01D481C5-7859-43F9-B224-219E8AD4A10C}.Release|Win32.ActiveCfg = Release|Win32
+		{01D481C5-7859-43F9-B224-219E8AD4A10C}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 153 - 0
Source/OGCAssistTool/OGCAssistTool/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 "OGCAssistTool.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
Source/OGCAssistTool/OGCAssistTool/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()
+};

+ 332 - 0
Source/OGCAssistTool/OGCAssistTool/ClassView.cpp

@@ -0,0 +1,332 @@
+// 这段 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 "MainFrm.h"
+#include "ClassView.h"
+#include "Resource.h"
+#include "OGCAssistTool.h"
+
+class CClassViewMenuButton : public CMFCToolBarMenuButton
+{
+	friend class CClassView;
+
+	DECLARE_SERIAL(CClassViewMenuButton)
+
+public:
+	CClassViewMenuButton(HMENU hMenu = NULL) : CMFCToolBarMenuButton((UINT)-1, hMenu, -1)
+	{
+	}
+
+	virtual void OnDraw(CDC* pDC, const CRect& rect, CMFCToolBarImages* pImages, BOOL bHorz = TRUE,
+		BOOL bCustomizeMode = FALSE, BOOL bHighlight = FALSE, BOOL bDrawBorder = TRUE, BOOL bGrayDisabledButtons = TRUE)
+	{
+		pImages = CMFCToolBar::GetImages();
+
+		CAfxDrawState ds;
+		pImages->PrepareDrawImage(ds);
+
+		CMFCToolBarMenuButton::OnDraw(pDC, rect, pImages, bHorz, bCustomizeMode, bHighlight, bDrawBorder, bGrayDisabledButtons);
+
+		pImages->EndDrawImage(ds);
+	}
+};
+
+IMPLEMENT_SERIAL(CClassViewMenuButton, CMFCToolBarMenuButton, 1)
+
+//////////////////////////////////////////////////////////////////////
+// 构造/析构
+//////////////////////////////////////////////////////////////////////
+
+CClassView::CClassView()
+{
+	m_nCurrSort = ID_SORTING_GROUPBYTYPE;
+}
+
+CClassView::~CClassView()
+{
+}
+
+BEGIN_MESSAGE_MAP(CClassView, CDockablePane)
+	ON_WM_CREATE()
+	ON_WM_SIZE()
+	ON_WM_CONTEXTMENU()
+	ON_COMMAND(ID_CLASS_ADD_MEMBER_FUNCTION, OnClassAddMemberFunction)
+	ON_COMMAND(ID_CLASS_ADD_MEMBER_VARIABLE, OnClassAddMemberVariable)
+	ON_COMMAND(ID_CLASS_DEFINITION, OnClassDefinition)
+	ON_COMMAND(ID_CLASS_PROPERTIES, OnClassProperties)
+	ON_COMMAND(ID_NEW_FOLDER, OnNewFolder)
+	ON_WM_PAINT()
+	ON_WM_SETFOCUS()
+	ON_COMMAND_RANGE(ID_SORTING_GROUPBYTYPE, ID_SORTING_SORTBYACCESS, OnSort)
+	ON_UPDATE_COMMAND_UI_RANGE(ID_SORTING_GROUPBYTYPE, ID_SORTING_SORTBYACCESS, OnUpdateSort)
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CClassView 消息处理程序
+
+int CClassView::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	CRect rectDummy;
+	rectDummy.SetRectEmpty();
+
+	// 创建视图:
+	const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
+
+	if (!m_wndClassView.Create(dwViewStyle, rectDummy, this, 2))
+	{
+		TRACE0("未能创建类视图\n");
+		return -1;      // 未能创建
+	}
+
+	// 加载图像:
+	m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_SORT);
+	m_wndToolBar.LoadToolBar(IDR_SORT, 0, 0, TRUE /* 已锁定*/);
+
+	OnChangeVisualStyle();
+
+	m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
+	m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
+
+	m_wndToolBar.SetOwner(this);
+
+	// 所有命令将通过此控件路由,而不是通过主框架路由:
+	m_wndToolBar.SetRouteCommandsViaFrame(FALSE);
+
+	CMenu menuSort;
+	menuSort.LoadMenu(IDR_POPUP_SORT);
+
+	m_wndToolBar.ReplaceButton(ID_SORT_MENU, CClassViewMenuButton(menuSort.GetSubMenu(0)->GetSafeHmenu()));
+
+	CClassViewMenuButton* pButton =  DYNAMIC_DOWNCAST(CClassViewMenuButton, m_wndToolBar.GetButton(0));
+
+	if (pButton != NULL)
+	{
+		pButton->m_bText = FALSE;
+		pButton->m_bImage = TRUE;
+		pButton->SetImage(GetCmdMgr()->GetCmdImage(m_nCurrSort));
+		pButton->SetMessageWnd(this);
+	}
+
+	// 填入一些静态树视图数据(此处只需填入虚拟代码,而不是复杂的数据)
+	FillClassView();
+
+	return 0;
+}
+
+void CClassView::OnSize(UINT nType, int cx, int cy)
+{
+	CDockablePane::OnSize(nType, cx, cy);
+	AdjustLayout();
+}
+
+void CClassView::FillClassView()
+{
+	HTREEITEM hRoot = m_wndClassView.InsertItem(_T("FakeApp 类"), 0, 0);
+	m_wndClassView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);
+
+	HTREEITEM hClass = m_wndClassView.InsertItem(_T("CFakeAboutDlg"), 1, 1, hRoot);
+	m_wndClassView.InsertItem(_T("CFakeAboutDlg()"), 3, 3, hClass);
+
+	m_wndClassView.Expand(hRoot, TVE_EXPAND);
+
+	hClass = m_wndClassView.InsertItem(_T("CFakeApp"), 1, 1, hRoot);
+	m_wndClassView.InsertItem(_T("CFakeApp()"), 3, 3, hClass);
+	m_wndClassView.InsertItem(_T("InitInstance()"), 3, 3, hClass);
+	m_wndClassView.InsertItem(_T("OnAppAbout()"), 3, 3, hClass);
+
+	hClass = m_wndClassView.InsertItem(_T("CFakeAppDoc"), 1, 1, hRoot);
+	m_wndClassView.InsertItem(_T("CFakeAppDoc()"), 4, 4, hClass);
+	m_wndClassView.InsertItem(_T("~CFakeAppDoc()"), 3, 3, hClass);
+	m_wndClassView.InsertItem(_T("OnNewDocument()"), 3, 3, hClass);
+
+	hClass = m_wndClassView.InsertItem(_T("CFakeAppView"), 1, 1, hRoot);
+	m_wndClassView.InsertItem(_T("CFakeAppView()"), 4, 4, hClass);
+	m_wndClassView.InsertItem(_T("~CFakeAppView()"), 3, 3, hClass);
+	m_wndClassView.InsertItem(_T("GetDocument()"), 3, 3, hClass);
+	m_wndClassView.Expand(hClass, TVE_EXPAND);
+
+	hClass = m_wndClassView.InsertItem(_T("CFakeAppFrame"), 1, 1, hRoot);
+	m_wndClassView.InsertItem(_T("CFakeAppFrame()"), 3, 3, hClass);
+	m_wndClassView.InsertItem(_T("~CFakeAppFrame()"), 3, 3, hClass);
+	m_wndClassView.InsertItem(_T("m_wndMenuBar"), 6, 6, hClass);
+	m_wndClassView.InsertItem(_T("m_wndToolBar"), 6, 6, hClass);
+	m_wndClassView.InsertItem(_T("m_wndStatusBar"), 6, 6, hClass);
+
+	hClass = m_wndClassView.InsertItem(_T("Globals"), 2, 2, hRoot);
+	m_wndClassView.InsertItem(_T("theFakeApp"), 5, 5, hClass);
+	m_wndClassView.Expand(hClass, TVE_EXPAND);
+}
+
+void CClassView::OnContextMenu(CWnd* pWnd, CPoint point)
+{
+	CTreeCtrl* pWndTree = (CTreeCtrl*)&m_wndClassView;
+	ASSERT_VALID(pWndTree);
+
+	if (pWnd != pWndTree)
+	{
+		CDockablePane::OnContextMenu(pWnd, point);
+		return;
+	}
+
+	if (point != CPoint(-1, -1))
+	{
+		// 选择已单击的项:
+		CPoint ptTree = point;
+		pWndTree->ScreenToClient(&ptTree);
+
+		UINT flags = 0;
+		HTREEITEM hTreeItem = pWndTree->HitTest(ptTree, &flags);
+		if (hTreeItem != NULL)
+		{
+			pWndTree->SelectItem(hTreeItem);
+		}
+	}
+
+	pWndTree->SetFocus();
+	CMenu menu;
+	menu.LoadMenu(IDR_POPUP_SORT);
+
+	CMenu* pSumMenu = menu.GetSubMenu(0);
+
+	if (AfxGetMainWnd()->IsKindOf(RUNTIME_CLASS(CMDIFrameWndEx)))
+	{
+		CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;
+
+		if (!pPopupMenu->Create(this, point.x, point.y, (HMENU)pSumMenu->m_hMenu, FALSE, TRUE))
+			return;
+
+		((CMDIFrameWndEx*)AfxGetMainWnd())->OnShowPopupMenu(pPopupMenu);
+		UpdateDialogControls(this, FALSE);
+	}
+}
+
+void CClassView::AdjustLayout()
+{
+	if (GetSafeHwnd() == NULL)
+	{
+		return;
+	}
+
+	CRect rectClient;
+	GetClientRect(rectClient);
+
+	int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy;
+
+	m_wndToolBar.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);
+	m_wndClassView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);
+}
+
+BOOL CClassView::PreTranslateMessage(MSG* pMsg)
+{
+	return CDockablePane::PreTranslateMessage(pMsg);
+}
+
+void CClassView::OnSort(UINT id)
+{
+	if (m_nCurrSort == id)
+	{
+		return;
+	}
+
+	m_nCurrSort = id;
+
+	CClassViewMenuButton* pButton =  DYNAMIC_DOWNCAST(CClassViewMenuButton, m_wndToolBar.GetButton(0));
+
+	if (pButton != NULL)
+	{
+		pButton->SetImage(GetCmdMgr()->GetCmdImage(id));
+		m_wndToolBar.Invalidate();
+		m_wndToolBar.UpdateWindow();
+	}
+}
+
+void CClassView::OnUpdateSort(CCmdUI* pCmdUI)
+{
+	pCmdUI->SetCheck(pCmdUI->m_nID == m_nCurrSort);
+}
+
+void CClassView::OnClassAddMemberFunction()
+{
+	AfxMessageBox(_T("添加成员函数..."));
+}
+
+void CClassView::OnClassAddMemberVariable()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CClassView::OnClassDefinition()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CClassView::OnClassProperties()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CClassView::OnNewFolder()
+{
+	AfxMessageBox(_T("新建文件夹..."));
+}
+
+void CClassView::OnPaint()
+{
+	CPaintDC dc(this); // 用于绘制的设备上下文
+
+	CRect rectTree;
+	m_wndClassView.GetWindowRect(rectTree);
+	ScreenToClient(rectTree);
+
+	rectTree.InflateRect(1, 1);
+	dc.Draw3dRect(rectTree, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DSHADOW));
+}
+
+void CClassView::OnSetFocus(CWnd* pOldWnd)
+{
+	CDockablePane::OnSetFocus(pOldWnd);
+
+	m_wndClassView.SetFocus();
+}
+
+void CClassView::OnChangeVisualStyle()
+{
+	m_ClassViewImages.DeleteImageList();
+
+	UINT uiBmpId = theApp.m_bHiColorIcons ? IDB_CLASS_VIEW_24 : IDB_CLASS_VIEW;
+
+	CBitmap bmp;
+	if (!bmp.LoadBitmap(uiBmpId))
+	{
+		TRACE(_T("无法加载位图: %x\n"), uiBmpId);
+		ASSERT(FALSE);
+		return;
+	}
+
+	BITMAP bmpObj;
+	bmp.GetBitmap(&bmpObj);
+
+	UINT nFlags = ILC_MASK;
+
+	nFlags |= (theApp.m_bHiColorIcons) ? ILC_COLOR24 : ILC_COLOR4;
+
+	m_ClassViewImages.Create(16, bmpObj.bmHeight, nFlags, 0, 0);
+	m_ClassViewImages.Add(&bmp, RGB(255, 0, 0));
+
+	m_wndClassView.SetImageList(&m_ClassViewImages, TVSIL_NORMAL);
+
+	m_wndToolBar.CleanUpLockedImages();
+	m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons ? IDB_SORT_24 : IDR_SORT, 0, 0, TRUE /* 锁定*/);
+}

+ 64 - 0
Source/OGCAssistTool/OGCAssistTool/ClassView.h

@@ -0,0 +1,64 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+#include "ViewTree.h"
+
+class CClassToolBar : public CMFCToolBar
+{
+	virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler)
+	{
+		CMFCToolBar::OnUpdateCmdUI((CFrameWnd*) GetOwner(), bDisableIfNoHndler);
+	}
+
+	virtual BOOL AllowShowOnList() const { return FALSE; }
+};
+
+class CClassView : public CDockablePane
+{
+public:
+	CClassView();
+	virtual ~CClassView();
+
+	void AdjustLayout();
+	void OnChangeVisualStyle();
+
+protected:
+	CClassToolBar m_wndToolBar;
+	CViewTree m_wndClassView;
+	CImageList m_ClassViewImages;
+	UINT m_nCurrSort;
+
+	void FillClassView();
+
+// 重写
+public:
+	virtual BOOL PreTranslateMessage(MSG* pMsg);
+
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
+	afx_msg void OnClassAddMemberFunction();
+	afx_msg void OnClassAddMemberVariable();
+	afx_msg void OnClassDefinition();
+	afx_msg void OnClassProperties();
+	afx_msg void OnNewFolder();
+	afx_msg void OnPaint();
+	afx_msg void OnSetFocus(CWnd* pOldWnd);
+	afx_msg LRESULT OnChangeActiveTab(WPARAM, LPARAM);
+	afx_msg void OnSort(UINT id);
+	afx_msg void OnUpdateSort(CCmdUI* pCmdUI);
+
+	DECLARE_MESSAGE_MAP()
+};
+

+ 96 - 0
Source/OGCAssistTool/OGCAssistTool/DlgLogin.cpp

@@ -0,0 +1,96 @@
+// DlgLogin.cpp : 实现文件
+//
+
+#include "stdafx.h"
+#include "OGCAssistTool.h"
+#include "DlgLogin.h"
+
+
+// CDlgLogin 对话框
+
+IMPLEMENT_DYNAMIC(CDlgLogin, CDialogEx)
+
+CDlgLogin::CDlgLogin(CWnd* pParent /*=NULL*/)
+	: CDialogEx(CDlgLogin::IDD, pParent)
+{
+
+}
+
+CDlgLogin::~CDlgLogin()
+{
+}
+
+void CDlgLogin::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+}
+
+
+BEGIN_MESSAGE_MAP(CDlgLogin, CDialogEx)
+	ON_WM_CTLCOLOR()
+END_MESSAGE_MAP()
+
+
+// CDlgLogin 消息处理程序
+
+BOOL CDlgLogin::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	// TODO:  在此添加额外的初始化
+	CFont font;
+	VERIFY(font.CreateFont(
+		19,                        // nHeight
+		0,                         // nWidth
+		0,                         // nEscapement
+		0,                         // nOrientation
+		FW_NORMAL,                 // nWeight
+		FALSE,                     // bItalic
+		FALSE,                     // bUnderline
+		0,                         // cStrikeOut
+		ANSI_CHARSET,              // nCharSet
+		OUT_DEFAULT_PRECIS,        // nOutPrecision
+		CLIP_DEFAULT_PRECIS,       // nClipPrecision
+		DEFAULT_QUALITY,           // nQuality
+		DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
+		_T("Arial")));             
+	SetFont(&font);
+	//SetBackgroundColor(RGB(125,0,25));
+	SetBackgroundImage(IDB_LOGO);
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+	// 异常: OCX 属性页应返回 FALSE
+}
+
+HBRUSH CDlgLogin::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	// TODO:  在此更改 DC 的任何属性
+
+	switch ( pWnd->GetDlgCtrlID() ) 
+	{
+	case CHECK_OFFLINE:
+		{
+#if 1 // 透明控件处理;
+			pDC->SetBkMode(TRANSPARENT);
+
+			CRect rc;
+			pWnd->GetWindowRect(&rc);
+			ScreenToClient(&rc);
+
+			CDC* dc = GetDC();
+			pDC->BitBlt(0,0,rc.Width(),rc.Height(),dc,rc.left,rc.top,SRCCOPY);  //把父窗口背景图片先画到按钮上
+
+			ReleaseDC(dc);
+			hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
+#endif
+		}
+		break;
+	default:
+		break; 
+	}
+
+	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
+	return hbr;
+}

+ 24 - 0
Source/OGCAssistTool/OGCAssistTool/DlgLogin.h

@@ -0,0 +1,24 @@
+#pragma once
+
+
+// CDlgLogin 对话框
+
+class CDlgLogin : public CDialogEx
+{
+	DECLARE_DYNAMIC(CDlgLogin)
+
+public:
+	CDlgLogin(CWnd* pParent = NULL);   // 标准构造函数
+	virtual ~CDlgLogin();
+
+// 对话框数据
+	enum { IDD = DLG_LOGIN };
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
+
+	DECLARE_MESSAGE_MAP()
+public:
+	virtual BOOL OnInitDialog();
+	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+};

+ 266 - 0
Source/OGCAssistTool/OGCAssistTool/FileView.cpp

@@ -0,0 +1,266 @@
+// 这段 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 "mainfrm.h"
+#include "FileView.h"
+#include "Resource.h"
+#include "OGCAssistTool.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+#define new DEBUG_NEW
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CFileView
+
+CFileView::CFileView()
+{
+}
+
+CFileView::~CFileView()
+{
+}
+
+BEGIN_MESSAGE_MAP(CFileView, CDockablePane)
+	ON_WM_CREATE()
+	ON_WM_SIZE()
+	ON_WM_CONTEXTMENU()
+	ON_COMMAND(ID_PROPERTIES, OnProperties)
+	ON_COMMAND(ID_OPEN, OnFileOpen)
+	ON_COMMAND(ID_OPEN_WITH, OnFileOpenWith)
+	ON_COMMAND(ID_DUMMY_COMPILE, OnDummyCompile)
+	ON_COMMAND(ID_EDIT_CUT, OnEditCut)
+	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
+	ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
+	ON_WM_PAINT()
+	ON_WM_SETFOCUS()
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CWorkspaceBar 消息处理程序
+
+int CFileView::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	CRect rectDummy;
+	rectDummy.SetRectEmpty();
+
+	// 创建视图:
+	const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
+
+	if (!m_wndFileView.Create(dwViewStyle, rectDummy, this, 4))
+	{
+		TRACE0("未能创建文件视图\n");
+		return -1;      // 未能创建
+	}
+
+	// 加载视图图像:
+	m_FileViewImages.Create(IDB_FILE_VIEW, 16, 0, RGB(255, 0, 255));
+	m_wndFileView.SetImageList(&m_FileViewImages, TVSIL_NORMAL);
+
+	m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_EXPLORER);
+	m_wndToolBar.LoadToolBar(IDR_EXPLORER, 0, 0, TRUE /* 已锁定*/);
+
+	OnChangeVisualStyle();
+
+	m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
+
+	m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
+
+	m_wndToolBar.SetOwner(this);
+
+	// 所有命令将通过此控件路由,而不是通过主框架路由:
+	m_wndToolBar.SetRouteCommandsViaFrame(FALSE);
+
+	// 填入一些静态树视图数据(此处只需填入虚拟代码,而不是复杂的数据)
+	FillFileView();
+	AdjustLayout();
+
+	return 0;
+}
+
+void CFileView::OnSize(UINT nType, int cx, int cy)
+{
+	CDockablePane::OnSize(nType, cx, cy);
+	AdjustLayout();
+}
+
+void CFileView::FillFileView()
+{
+	HTREEITEM hRoot = m_wndFileView.InsertItem(_T("FakeApp 文件"), 0, 0);
+	m_wndFileView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);
+
+	HTREEITEM hSrc = m_wndFileView.InsertItem(_T("FakeApp 源文件"), 0, 0, hRoot);
+
+	m_wndFileView.InsertItem(_T("FakeApp.cpp"), 1, 1, hSrc);
+	m_wndFileView.InsertItem(_T("FakeApp.rc"), 1, 1, hSrc);
+	m_wndFileView.InsertItem(_T("FakeAppDoc.cpp"), 1, 1, hSrc);
+	m_wndFileView.InsertItem(_T("FakeAppView.cpp"), 1, 1, hSrc);
+	m_wndFileView.InsertItem(_T("MainFrm.cpp"), 1, 1, hSrc);
+	m_wndFileView.InsertItem(_T("StdAfx.cpp"), 1, 1, hSrc);
+
+	HTREEITEM hInc = m_wndFileView.InsertItem(_T("FakeApp 头文件"), 0, 0, hRoot);
+
+	m_wndFileView.InsertItem(_T("FakeApp.h"), 2, 2, hInc);
+	m_wndFileView.InsertItem(_T("FakeAppDoc.h"), 2, 2, hInc);
+	m_wndFileView.InsertItem(_T("FakeAppView.h"), 2, 2, hInc);
+	m_wndFileView.InsertItem(_T("Resource.h"), 2, 2, hInc);
+	m_wndFileView.InsertItem(_T("MainFrm.h"), 2, 2, hInc);
+	m_wndFileView.InsertItem(_T("StdAfx.h"), 2, 2, hInc);
+
+	HTREEITEM hRes = m_wndFileView.InsertItem(_T("FakeApp 资源文件"), 0, 0, hRoot);
+
+	m_wndFileView.InsertItem(_T("FakeApp.ico"), 2, 2, hRes);
+	m_wndFileView.InsertItem(_T("FakeApp.rc2"), 2, 2, hRes);
+	m_wndFileView.InsertItem(_T("FakeAppDoc.ico"), 2, 2, hRes);
+	m_wndFileView.InsertItem(_T("FakeToolbar.bmp"), 2, 2, hRes);
+
+	m_wndFileView.Expand(hRoot, TVE_EXPAND);
+	m_wndFileView.Expand(hSrc, TVE_EXPAND);
+	m_wndFileView.Expand(hInc, TVE_EXPAND);
+}
+
+void CFileView::OnContextMenu(CWnd* pWnd, CPoint point)
+{
+	CTreeCtrl* pWndTree = (CTreeCtrl*) &m_wndFileView;
+	ASSERT_VALID(pWndTree);
+
+	if (pWnd != pWndTree)
+	{
+		CDockablePane::OnContextMenu(pWnd, point);
+		return;
+	}
+
+	if (point != CPoint(-1, -1))
+	{
+		// 选择已单击的项:
+		CPoint ptTree = point;
+		pWndTree->ScreenToClient(&ptTree);
+
+		UINT flags = 0;
+		HTREEITEM hTreeItem = pWndTree->HitTest(ptTree, &flags);
+		if (hTreeItem != NULL)
+		{
+			pWndTree->SelectItem(hTreeItem);
+		}
+	}
+
+	pWndTree->SetFocus();
+	theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EXPLORER, point.x, point.y, this, TRUE);
+}
+
+void CFileView::AdjustLayout()
+{
+	if (GetSafeHwnd() == NULL)
+	{
+		return;
+	}
+
+	CRect rectClient;
+	GetClientRect(rectClient);
+
+	int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy;
+
+	m_wndToolBar.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);
+	m_wndFileView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);
+}
+
+void CFileView::OnProperties()
+{
+	AfxMessageBox(_T("属性...."));
+
+}
+
+void CFileView::OnFileOpen()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CFileView::OnFileOpenWith()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CFileView::OnDummyCompile()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CFileView::OnEditCut()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CFileView::OnEditCopy()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CFileView::OnEditClear()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CFileView::OnPaint()
+{
+	CPaintDC dc(this); // 用于绘制的设备上下文
+
+	CRect rectTree;
+	m_wndFileView.GetWindowRect(rectTree);
+	ScreenToClient(rectTree);
+
+	rectTree.InflateRect(1, 1);
+	dc.Draw3dRect(rectTree, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DSHADOW));
+}
+
+void CFileView::OnSetFocus(CWnd* pOldWnd)
+{
+	CDockablePane::OnSetFocus(pOldWnd);
+
+	m_wndFileView.SetFocus();
+}
+
+void CFileView::OnChangeVisualStyle()
+{
+	m_wndToolBar.CleanUpLockedImages();
+	m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons ? IDB_EXPLORER_24 : IDR_EXPLORER, 0, 0, TRUE /* 锁定 */);
+
+	m_FileViewImages.DeleteImageList();
+
+	UINT uiBmpId = theApp.m_bHiColorIcons ? IDB_FILE_VIEW_24 : IDB_FILE_VIEW;
+
+	CBitmap bmp;
+	if (!bmp.LoadBitmap(uiBmpId))
+	{
+		TRACE(_T("无法加载位图: %x\n"), uiBmpId);
+		ASSERT(FALSE);
+		return;
+	}
+
+	BITMAP bmpObj;
+	bmp.GetBitmap(&bmpObj);
+
+	UINT nFlags = ILC_MASK;
+
+	nFlags |= (theApp.m_bHiColorIcons) ? ILC_COLOR24 : ILC_COLOR4;
+
+	m_FileViewImages.Create(16, bmpObj.bmHeight, nFlags, 0, 0);
+	m_FileViewImages.Add(&bmp, RGB(255, 0, 255));
+
+	m_wndFileView.SetImageList(&m_FileViewImages, TVSIL_NORMAL);
+}
+
+

+ 65 - 0
Source/OGCAssistTool/OGCAssistTool/FileView.h

@@ -0,0 +1,65 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+#include "ViewTree.h"
+
+class CFileViewToolBar : public CMFCToolBar
+{
+	virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler)
+	{
+		CMFCToolBar::OnUpdateCmdUI((CFrameWnd*) GetOwner(), bDisableIfNoHndler);
+	}
+
+	virtual BOOL AllowShowOnList() const { return FALSE; }
+};
+
+class CFileView : public CDockablePane
+{
+// 构造
+public:
+	CFileView();
+
+	void AdjustLayout();
+	void OnChangeVisualStyle();
+
+// 属性
+protected:
+
+	CViewTree m_wndFileView;
+	CImageList m_FileViewImages;
+	CFileViewToolBar m_wndToolBar;
+
+protected:
+	void FillFileView();
+
+// 实现
+public:
+	virtual ~CFileView();
+
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
+	afx_msg void OnProperties();
+	afx_msg void OnFileOpen();
+	afx_msg void OnFileOpenWith();
+	afx_msg void OnDummyCompile();
+	afx_msg void OnEditCut();
+	afx_msg void OnEditCopy();
+	afx_msg void OnEditClear();
+	afx_msg void OnPaint();
+	afx_msg void OnSetFocus(CWnd* pOldWnd);
+
+	DECLARE_MESSAGE_MAP()
+};
+

+ 618 - 0
Source/OGCAssistTool/OGCAssistTool/MainFrm.cpp

@@ -0,0 +1,618 @@
+// 这段 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 "OGCAssistTool.h"
+
+#include "MainFrm.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+// CMainFrame
+
+IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)
+
+BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
+	ON_WM_CREATE()
+	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
+	ON_COMMAND(ID_FILE_PRINT, &CMainFrame::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CMainFrame::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMainFrame::OnFilePrintPreview)
+	ON_UPDATE_COMMAND_UI(ID_FILE_PRINT_PREVIEW, &CMainFrame::OnUpdateFilePrintPreview)
+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 (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	BOOL bNameValid;
+	// 基于持久值设置视觉管理器和样式
+	OnApplicationLook(theApp.m_nAppLook);
+
+	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);
+
+#ifndef DISABLE_OUTLOOKBAR
+	// 创建并设置“Outlook”导航栏:
+	if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
+	{
+		TRACE0("未能创建导航窗格\n");
+		return -1;      // 未能创建
+	}
+#endif
+
+#ifndef DISABLE_CAPTIONBAR
+	// 创建标题栏:
+	if (!CreateCaptionBar())
+	{
+		TRACE0("未能创建标题栏\n");
+		return -1;      // 未能创建
+	}
+#endif
+
+	// 已创建 Outlook 栏,应允许在左侧停靠。
+	EnableDocking(CBRS_ALIGN_LEFT);
+	EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
+
+	// 加载菜单项图像(不在任何标准工具栏上):
+	CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
+
+	// 创建停靠窗口
+	if (!CreateDockingWindows())
+	{
+		TRACE0("未能创建停靠窗口\n");
+		return -1;
+	}
+
+	m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
+	m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
+	DockPane(&m_wndFileView);
+	CDockablePane* pTabbedBar = NULL;
+	m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
+	m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
+	DockPane(&m_wndOutput);
+	m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
+	DockPane(&m_wndProperties);
+
+
+	return 0;
+}
+
+BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
+{
+	if( !CFrameWndEx::PreCreateWindow(cs) )
+		return FALSE;
+	// TODO: 在此处通过修改
+	//  CREATESTRUCT cs 来修改窗口类或样式
+
+	cs.cx = 800;
+	cs.cy = 600;
+
+	cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
+		 | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_SYSMENU;
+
+	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);
+
+#pragma region 主按钮相关;
+	// 初始主按钮:
+	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);
+
+#if 0 // 禁用文档相关菜单;
+	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));
+#endif
+
+#if 0 // 禁用打印相关的菜单;
+	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));
+#endif
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_CLOSE);
+	ASSERT(bNameValid);
+	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_CLOSE, strTemp, 9, 9));
+
+#if 0 // 去掉最近打开的文档;
+	bNameValid = strTemp.LoadString(IDS_RIBBON_RECENT_DOCS);
+	ASSERT(bNameValid);
+	pMainPanel->AddRecentFilesList(strTemp);
+#endif
+
+	bNameValid = strTemp.LoadString(IDS_RIBBON_EXIT);
+	ASSERT(bNameValid);
+	pMainPanel->AddToBottom(new CMFCRibbonMainPanelButton(ID_APP_EXIT, strTemp, 15));
+#pragma endregion
+
+#pragma region 主页面板相关;
+	// 为“剪贴板”面板添加“主”类别:
+	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);
+#pragma endregion
+
+#pragma region 调试栏目相关;
+	bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
+	ASSERT(bNameValid);
+	strTemp = _T("调试(&D)");
+	CMFCRibbonCategory* pCategoryDebug = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
+
+	// 1、创建面板;
+	strTemp = _T("工站参数");
+	CMFCRibbonPanel* pPanelDebug = pCategoryDebug->AddPanel(strTemp, m_PanelImages.ExtractIcon(7));
+	// 排序面板按列垂直对齐元素;
+	pPanelDebug->SetCenterColumnVert(TRUE);
+	// 启用或禁用功能区元素的宽度调整在同一列的
+	pPanelDebug->SetJustifyColumns(TRUE);
+
+	// 2、往面板添加控件;
+	// 只有组的元素,才能水平对齐;
+	CMFCRibbonButtonsGroup* pGroupDebug = new CMFCRibbonButtonsGroup();
+	pPanelDebug->Add(pGroupDebug);
+
+	// 3、控件;
+	strTemp = _T("线体");
+	CMFCRibbonLabel* pCameraLable = new CMFCRibbonLabel(strTemp);
+	pGroupDebug->AddButton(pCameraLable);
+	pCameraLable->SetRect(CRect(0, 0, 150, 20));
+
+	strTemp = _T("线体");
+	CMFCRibbonEdit* pCameraEdit = new CMFCRibbonEdit(0, 100, strTemp);
+	pGroupDebug->AddButton(pCameraEdit);
+	pCameraEdit->SetRect(CRect(0, 0, 150, 20));
+#pragma endregion
+
+#pragma region 日志栏目相关;
+	bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
+	ASSERT(bNameValid);
+	strTemp = _T("日志(&L)");
+	CMFCRibbonCategory* pCategoryDebugLog = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
+
+#pragma endregion
+
+#pragma region 统计栏目相关;
+	bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
+	ASSERT(bNameValid);
+	strTemp = _T("统计(&S)");
+	CMFCRibbonCategory* pCategoryStatistics = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
+#pragma endregion
+
+#pragma region 设置栏目相关;
+	bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
+	ASSERT(bNameValid);
+	strTemp = _T("设置(&C)");
+	CMFCRibbonCategory* pCategoryConfig = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
+#pragma endregion
+
+	// 将元素添加到选项卡右侧:
+	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::CreateDockingWindows()
+{
+	BOOL bNameValid;
+
+	// 创建类视图
+	CString strClassView;
+	bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
+	ASSERT(bNameValid);
+	if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
+	{
+		TRACE0("未能创建“类视图”窗口\n");
+		return FALSE; // 未能创建
+	}
+
+	// 创建文件视图
+	CString strFileView;
+	bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
+	ASSERT(bNameValid);
+	if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI))
+	{
+		TRACE0("未能创建“文件视图”窗口\n");
+		return FALSE; // 未能创建
+	}
+
+	// 创建输出窗口
+	CString strOutputWnd;
+	bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
+	ASSERT(bNameValid);
+	if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
+	{
+		TRACE0("未能创建输出窗口\n");
+		return FALSE; // 未能创建
+	}
+
+	// 创建属性窗口
+	CString strPropertiesWnd;
+	bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
+	ASSERT(bNameValid);
+	if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
+	{
+		TRACE0("未能创建“属性”窗口\n");
+		return FALSE; // 未能创建
+	}
+
+	SetDockingWindowIcons(theApp.m_bHiColorIcons);
+	return TRUE;
+}
+
+void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
+{
+	HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
+	m_wndFileView.SetIcon(hFileViewIcon, FALSE);
+
+	HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
+	m_wndClassView.SetIcon(hClassViewIcon, FALSE);
+
+	HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
+	m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
+
+	HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
+	m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
+
+}
+
+#ifndef DISABLE_OUTLOOKBAR
+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;
+}
+
+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
+{
+	CFrameWndEx::AssertValid();
+}
+
+void CMainFrame::Dump(CDumpContext& dc) const
+{
+	CFrameWndEx::Dump(dc);
+}
+#endif //_DEBUG
+
+
+// CMainFrame 消息处理程序
+
+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
+
+void CMainFrame::OnFilePrint()
+{
+	if (IsPrintPreview())
+	{
+		PostMessage(WM_COMMAND, AFX_ID_PREVIEW_PRINT);
+	}
+}
+
+void CMainFrame::OnFilePrintPreview()
+{
+	if (IsPrintPreview())
+	{
+		PostMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE);  // 强制关闭“打印预览”模式
+	}
+}
+
+void CMainFrame::OnUpdateFilePrintPreview(CCmdUI* pCmdUI)
+{
+	pCmdUI->SetCheck(IsPrintPreview());
+}

+ 97 - 0
Source/OGCAssistTool/OGCAssistTool/MainFrm.h

@@ -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
+// 保留所有权利。
+
+// MainFrm.h : CMainFrame 类的接口
+//
+
+#pragma once
+#include "FileView.h"
+#include "ClassView.h"
+#include "OutputWnd.h"
+#include "PropertiesWnd.h"
+#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 CFrameWndEx
+{
+	
+protected: // 仅从序列化创建
+	CMainFrame();
+	DECLARE_DYNCREATE(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;
+	CFileView         m_wndFileView;
+	CClassView        m_wndClassView;
+	COutputWnd        m_wndOutput;
+	CPropertiesWnd    m_wndProperties;
+#ifndef DISABLE_OUTLOOKBAR
+	COutlookBar       m_wndNavigationBar;
+	CMFCShellTreeCtrl m_wndTree;
+	CCalendarBar      m_wndCalendar;
+#endif
+#ifndef DISABLE_CAPTIONBAR
+	CMFCCaptionBar    m_wndCaptionBar;
+#endif
+
+// 生成的消息映射函数
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnApplicationLook(UINT id);
+	afx_msg void OnUpdateApplicationLook(CCmdUI* pCmdUI);
+	afx_msg void OnViewCaptionBar();
+	afx_msg void OnUpdateViewCaptionBar(CCmdUI* pCmdUI);
+	afx_msg void OnFilePrint();
+	afx_msg void OnFilePrintPreview();
+	afx_msg void OnUpdateFilePrintPreview(CCmdUI* pCmdUI);
+	DECLARE_MESSAGE_MAP()
+
+	void InitializeRibbon();
+	BOOL CreateDockingWindows();
+	void SetDockingWindowIcons(BOOL bHiColorIcons);
+	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;
+};
+
+

+ 204 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.cpp

@@ -0,0 +1,204 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+// OGCAssistTool.cpp : 定义应用程序的类行为。
+//
+
+#include "stdafx.h"
+#include "afxwinappex.h"
+#include "OGCAssistTool.h"
+#include "MainFrm.h"
+#include "DlgLogin.h"
+#include "OGCAssistToolDoc.h"
+#include "OGCAssistToolView.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+
+// COGCAssistToolApp
+
+BEGIN_MESSAGE_MAP(COGCAssistToolApp, CWinAppEx)
+	ON_COMMAND(ID_APP_ABOUT, &COGCAssistToolApp::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()
+
+
+// COGCAssistToolApp 构造
+
+COGCAssistToolApp::COGCAssistToolApp()
+{
+
+	m_bHiColorIcons = TRUE;
+
+	// TODO: 在此处添加构造代码,
+	// 将所有重要的初始化放置在 InitInstance 中
+}
+
+// 唯一的一个 COGCAssistToolApp 对象
+
+COGCAssistToolApp theApp;
+
+
+// COGCAssistToolApp 初始化
+
+BOOL COGCAssistToolApp::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 文件选项
+
+#pragma region 登录对话框;
+	CDlgLogin LoginDlg;
+	if ( LoginDlg.DoModal() != IDOK )
+	{
+		return FALSE;
+	}
+#pragma endregion
+
+	InitContextMenuManager();
+	InitShellManager();
+
+	InitKeyboardManager();
+
+	InitTooltipManager();
+	CMFCToolTipInfo ttParams;
+	ttParams.m_bVislManagerTheme = TRUE;
+	theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
+		RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);
+
+	// 注册应用程序的文档模板。文档模板
+	// 将用作文档、框架窗口和视图之间的连接
+	CSingleDocTemplate* pDocTemplate;
+	pDocTemplate = new CSingleDocTemplate(
+		IDR_MAINFRAME,
+		RUNTIME_CLASS(COGCAssistToolDoc),
+		RUNTIME_CLASS(CMainFrame),       // 主 SDI 框架窗口
+		RUNTIME_CLASS(COGCAssistToolView));
+	if (!pDocTemplate)
+		return FALSE;
+	AddDocTemplate(pDocTemplate);
+
+
+
+	// 分析标准外壳命令、DDE、打开文件操作的命令行
+	CCommandLineInfo cmdInfo;
+	ParseCommandLine(cmdInfo);
+
+
+	// 调度在命令行中指定的命令。如果
+	// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
+	if (!ProcessShellCommand(cmdInfo))
+		return FALSE;
+
+	// 唯一的一个窗口已初始化,因此显示它并对其进行更新
+	m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
+	m_pMainWnd->UpdateWindow();
+	// 仅当具有后缀时才调用 DragAcceptFiles
+	//  在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生
+	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 COGCAssistToolApp::OnAppAbout()
+{
+	CAboutDlg aboutDlg;
+	aboutDlg.DoModal();
+}
+
+// COGCAssistToolApp 自定义加载/保存方法
+
+void COGCAssistToolApp::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 COGCAssistToolApp::LoadCustomState()
+{
+}
+
+void COGCAssistToolApp::SaveCustomState()
+{
+}
+
+// COGCAssistToolApp 消息处理程序
+
+
+

+ 49 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.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
+// 保留所有权利。
+
+// OGCAssistTool.h : OGCAssistTool 应用程序的主头文件
+//
+#pragma once
+
+#ifndef __AFXWIN_H__
+	#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
+#endif
+
+#include "resource.h"       // 主符号
+
+
+// COGCAssistToolApp:
+// 有关此类的实现,请参阅 OGCAssistTool.cpp
+//
+
+class COGCAssistToolApp : public CWinAppEx
+{
+public:
+	COGCAssistToolApp();
+
+
+// 重写
+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 COGCAssistToolApp theApp;

+ 666 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.rc

@@ -0,0 +1,666 @@
+// 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\\OGCAssistTool.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\\OGCAssistTool.ico"
+IDR_OGCAssistToolTYPE   ICON                    "res\\OGCAssistToolDoc.ico"
+IDI_FILE_VIEW           ICON                    "res\\file_view.ico"
+IDI_FILE_VIEW_HC        ICON                    "res\\file_view_hc.ico"
+IDI_CLASS_VIEW          ICON                    "res\\class_view.ico"
+IDI_CLASS_VIEW_HC       ICON                    "res\\class_view_hc.ico"
+IDI_OUTPUT_WND          ICON                    "res\\output_wnd.ico"
+IDI_OUTPUT_WND_HC       ICON                    "res\\output_wnd_hc.ico"
+IDI_PROPERTIES_WND      ICON                    "res\\properties_wnd.ico"
+IDI_PROPERTIES_WND_HC   ICON                    "res\\properties_wnd_hc.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"
+IDR_SORT                BITMAP                  "res\\sort.bmp"
+IDB_SORT_24             BITMAP                  "res\\sort_hc.bmp"
+IDB_FILE_VIEW           BITMAP                  "res\\fileview.bmp"
+IDB_FILE_VIEW_24        BITMAP                  "res\\fileview_hc.bmp"
+IDB_CLASS_VIEW          BITMAP                  "res\\classview.bmp"
+IDB_CLASS_VIEW_24       BITMAP                  "res\\classview_hc.bmp"
+IDR_EXPLORER            BITMAP                  "res\\explorer.bmp"
+IDB_EXPLORER_24         BITMAP                  "res\\explorer_hc.bmp"
+IDR_MENU_IMAGES         BITMAP                  "res\\menuimages.bmp"
+IDB_MENU_IMAGES_24      BITMAP                  "res\\menuimages_hc.bmp"
+IDR_PROPERTIES          BITMAP                  "res\\properties.bmp"
+IDB_PROPERTIES_HC       BITMAP                  "res\\properties_hc.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"
+IDB_LOGO                BITMAP                  "res\\logo.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
+
+IDR_SORT TOOLBAR  16, 16
+BEGIN
+    BUTTON      ID_SORT_MENU
+    BUTTON      ID_NEW_FOLDER
+END
+
+IDR_EXPLORER TOOLBAR  16, 16
+BEGIN
+    BUTTON      ID_PROPERTIES
+END
+
+IDR_MENU_IMAGES TOOLBAR  16, 16
+BEGIN
+    BUTTON      ID_WINDOW_MANAGER
+    SEPARATOR
+    BUTTON      ID_WINDOW_CASCADE
+    BUTTON      ID_WINDOW_TILE_HORZ
+    BUTTON      ID_TOOLS_MACRO
+    BUTTON      ID_SORTING_SORTALPHABETIC
+    BUTTON      ID_SORTING_SORTBYTYPE
+    BUTTON      ID_SORTING_SORTBYACCESS
+    BUTTON      ID_SORTING_GROUPBYTYPE
+END
+
+IDR_PROPERTIES TOOLBAR  16, 16
+BEGIN
+    BUTTON      ID_EXPAND_ALL
+    BUTTON      ID_SORTPROPERTIES
+    BUTTON      ID_PROPERTIES1
+    BUTTON      ID_PROPERTIES2
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_MAINFRAME MENU 
+BEGIN
+    POPUP "文件(&F)"
+    BEGIN
+        MENUITEM "新建(&N)\tCtrl+N",              ID_FILE_NEW
+        MENUITEM "打开(&O)...\tCtrl+O",           ID_FILE_OPEN
+        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 "帮助(&H)"
+    BEGIN
+        MENUITEM "关于 OGCAssistTool(&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_POPUP_SORT MENU 
+BEGIN
+    POPUP "排序"
+    BEGIN
+        MENUITEM "按字母顺序排序(&S)",                 ID_SORTING_SORTALPHABETIC
+        MENUITEM "按类型排序(&T)",                   ID_SORTING_SORTBYTYPE
+        MENUITEM "按访问排序(&E)",                   ID_SORTING_SORTBYACCESS
+        MENUITEM "按类型分组(&Y)",                   ID_SORTING_GROUPBYTYPE
+    END
+END
+
+IDR_POPUP_EXPLORER MENU 
+BEGIN
+    POPUP "资源管理器"
+    BEGIN
+        MENUITEM "打开(&O)",                      ID_OPEN
+        MENUITEM "打开方式(&W)....",                ID_OPEN_WITH
+        MENUITEM SEPARATOR
+        MENUITEM "编译(&C)",                      ID_DUMMY_COMPILE
+        MENUITEM SEPARATOR
+        MENUITEM "剪切(&T)\tCtrl+X",              ID_EDIT_CUT
+        MENUITEM "复制(&C)\tCtrl+C",              ID_EDIT_COPY
+        MENUITEM "删除(&R)",                      ID_EDIT_CLEAR
+        MENUITEM SEPARATOR
+        MENUITEM "属性(&P)...",                   ID_PROPERTIES
+    END
+END
+
+IDR_OUTPUT_POPUP MENU 
+BEGIN
+    POPUP "弹出项"
+    BEGIN
+        MENUITEM "复制(&C)",                      ID_EDIT_COPY
+        MENUITEM "清除(&C)",                      ID_EDIT_CLEAR
+        MENUITEM SEPARATOR
+        MENUITEM "隐藏(&H)",                      ID_VIEW_OUTPUTWND
+    END
+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 "关于 OGCAssistTool"
+FONT 9, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20
+    LTEXT           "OGCAssistTool,1.0 版",IDC_STATIC,42,14,114,8,SS_NOPREFIX
+    LTEXT           "Copyright (C) 2022",IDC_STATIC,42,26,114,8
+    DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
+END
+
+DLG_LOGIN DIALOGEX 0, 0, 260, 135
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "登录"
+FONT 8, "Microsoft Sans Serif", 400, 0, 0x0
+BEGIN
+    EDITTEXT        EDIT_ACCOUNT,101,26,88,14,ES_AUTOHSCROLL
+    EDITTEXT        EDIT_PASSWORD,101,47,88,14,ES_PASSWORD | ES_AUTOHSCROLL
+    EDITTEXT        EDIT_LINE,101,68,88,14,ES_AUTOHSCROLL
+    CONTROL         "离线模式",CHECK_OFFLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,101,88,48,10,WS_EX_TRANSPARENT
+    DEFPUSHBUTTON   "登录",IDOK,65,102,52,16
+    PUSHBUTTON      "取消",IDCANCEL,143,102,52,16
+    LTEXT           "账号:",IDC_STATIC,70,29,25,8
+    LTEXT           "密码:",IDC_STATIC,70,50,25,8
+    LTEXT           "线体:",IDC_STATIC,70,71,25,8
+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", "TODO: <公司名>"
+            VALUE "FileDescription", "TODO: <文件说明>"
+            VALUE "FileVersion", "1.0.0.1"
+            VALUE "InternalName", "OGCAssistTool.exe"
+            VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有权利。"
+            VALUE "OriginalFilename", "OGCAssistTool.exe"
+            VALUE "ProductName", "TODO: <产品名>"
+            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
+
+    DLG_LOGIN, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 253
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 128
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDP_OLE_INIT_FAILED     "OLE 初始化失败。请确保 OLE 库是正确的版本。"
+END
+
+STRINGTABLE 
+BEGIN
+    IDR_MAINFRAME           "OGCAssistTool\n\nOGCAssistTool\n\n\nOGCAssistTool.Document\nOGCAssistTool.Document"
+END
+
+STRINGTABLE 
+BEGIN
+    AFX_IDS_APP_TITLE       "OGCAssistTool"
+    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_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      "激活任务列表"
+END
+
+STRINGTABLE 
+BEGIN
+    AFX_IDS_PREVIEW_CLOSE   "关闭打印预览模式\n取消预览"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_STATUS_PANE1        "窗格 1"
+    IDS_STATUS_PANE2        "窗格 2"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_FILE_VIEW           "文件视图"
+    IDS_CLASS_VIEW          "类视图"
+    IDS_OUTPUT_WND          "输出"
+    IDS_PROPERTIES_WND      "属性"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_EXPLORER            "资源管理器"
+    IDS_EDIT_MENU           "编辑"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_RIBBON_STYLE_DESC   "选择一个 Office 2007 主题"
+    IDS_RIBBON_STATUSBAR    "状态栏"
+    IDS_RIBBON_VIEW         "视图"
+    IDS_RIBBON_CAPTIONBAR   "标题栏"
+    IDS_BUILD_TAB           "生成"
+    IDS_DEBUG_TAB           "调试"
+    IDS_FIND_TAB            "查找"
+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_CAPTION_BUTTON      "选项..."
+    IDS_CAPTION_BUTTON_TIP  "单击此处查看其他选项"
+    IDS_CAPTION_TEXT        "这是标题栏,可在其中向用户显示消息。"
+    IDS_CAPTION_IMAGE_TIP   "重要事项"
+    IDS_CAPTION_IMAGE_TEXT  "这是向用户显示的信息性消息。"
+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\OGCAssistTool.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
+

+ 492 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.vcproj

@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="OGCAssistTool"
+	ProjectGUID="{01D481C5-7859-43F9-B224-219E8AD4A10C}"
+	RootNamespace="OGCAssistTool"
+	Keyword="MFCProj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="..\..\..\..\bin\$(SolutionName)"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)\$(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\$(SolutionName)"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)\$(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=".\ClassView.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\DlgLogin.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\FileView.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\MainFrm.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistTool.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistToolDoc.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistToolView.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\OutputWnd.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\PropertiesWnd.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>
+			<File
+				RelativePath=".\ViewTree.cpp"
+				>
+			</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=".\ClassView.h"
+				>
+			</File>
+			<File
+				RelativePath=".\DlgLogin.h"
+				>
+			</File>
+			<File
+				RelativePath=".\FileView.h"
+				>
+			</File>
+			<File
+				RelativePath=".\MainFrm.h"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistTool.h"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistToolDoc.h"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistToolView.h"
+				>
+			</File>
+			<File
+				RelativePath=".\OutputWnd.h"
+				>
+			</File>
+			<File
+				RelativePath=".\PropertiesWnd.h"
+				>
+			</File>
+			<File
+				RelativePath=".\Resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\stdafx.h"
+				>
+			</File>
+			<File
+				RelativePath=".\targetver.h"
+				>
+			</File>
+			<File
+				RelativePath=".\ViewTree.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\class_view.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\class_view_hc.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\classview.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\classview_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\explorer.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\explorer_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\file_view.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\file_view_hc.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\filelarge.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\filesmall.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\fileview.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\fileview_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\info.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\logo.bmp"
+				>
+			</File>
+			<File
+				RelativePath="C:\Users\scbc.sat23\Desktop\logo.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\main.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\menuimages.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\menuimages_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\nav_large.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\nav_large_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\OGCAssistTool.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\OGCAssistTool.rc"
+				>
+			</File>
+			<File
+				RelativePath=".\res\OGCAssistTool.rc2"
+				>
+			</File>
+			<File
+				RelativePath=".\res\OGCAssistToolDoc.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\output_wnd.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\output_wnd_hc.ico"
+				>
+			</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\properties.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\properties_hc.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\properties_wnd.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\properties_wnd_hc.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\res\sort.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\res\sort_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
Source/OGCAssistTool/OGCAssistTool/OGCAssistToolDoc.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
+// 保留所有权利。
+
+// OGCAssistToolDoc.cpp : COGCAssistToolDoc 类的实现
+//
+
+#include "stdafx.h"
+#include "OGCAssistTool.h"
+
+#include "OGCAssistToolDoc.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+
+// COGCAssistToolDoc
+
+IMPLEMENT_DYNCREATE(COGCAssistToolDoc, CDocument)
+
+BEGIN_MESSAGE_MAP(COGCAssistToolDoc, CDocument)
+END_MESSAGE_MAP()
+
+
+// COGCAssistToolDoc 构造/析构
+
+COGCAssistToolDoc::COGCAssistToolDoc()
+{
+	// TODO: 在此添加一次性构造代码
+
+}
+
+COGCAssistToolDoc::~COGCAssistToolDoc()
+{
+}
+
+BOOL COGCAssistToolDoc::OnNewDocument()
+{
+	if (!CDocument::OnNewDocument())
+		return FALSE;
+
+	// TODO: 在此添加重新初始化代码
+	// (SDI 文档将重用该文档)
+
+	return TRUE;
+}
+
+
+
+
+// COGCAssistToolDoc 序列化
+
+void COGCAssistToolDoc::Serialize(CArchive& ar)
+{
+	if (ar.IsStoring())
+	{
+		// TODO: 在此添加存储代码
+	}
+	else
+	{
+		// TODO: 在此添加加载代码
+	}
+}
+
+
+// COGCAssistToolDoc 诊断
+
+#ifdef _DEBUG
+void COGCAssistToolDoc::AssertValid() const
+{
+	CDocument::AssertValid();
+}
+
+void COGCAssistToolDoc::Dump(CDumpContext& dc) const
+{
+	CDocument::Dump(dc);
+}
+#endif //_DEBUG
+
+
+// COGCAssistToolDoc 命令

+ 51 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistToolDoc.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
+// 保留所有权利。
+
+// OGCAssistToolDoc.h : COGCAssistToolDoc 类的接口
+//
+
+
+#pragma once
+
+
+class COGCAssistToolDoc : public CDocument
+{
+protected: // 仅从序列化创建
+	COGCAssistToolDoc();
+	DECLARE_DYNCREATE(COGCAssistToolDoc)
+
+// 属性
+public:
+
+// 操作
+public:
+
+// 重写
+public:
+	virtual BOOL OnNewDocument();
+	virtual void Serialize(CArchive& ar);
+
+// 实现
+public:
+	virtual ~COGCAssistToolDoc();
+#ifdef _DEBUG
+	virtual void AssertValid() const;
+	virtual void Dump(CDumpContext& dc) const;
+#endif
+
+protected:
+
+// 生成的消息映射函数
+protected:
+	DECLARE_MESSAGE_MAP()
+};
+
+

+ 127 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistToolView.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
+// 保留所有权利。
+
+// OGCAssistToolView.cpp : COGCAssistToolView 类的实现
+//
+
+#include "stdafx.h"
+#include "OGCAssistTool.h"
+
+#include "OGCAssistToolDoc.h"
+#include "OGCAssistToolView.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+
+// COGCAssistToolView
+
+IMPLEMENT_DYNCREATE(COGCAssistToolView, CView)
+
+BEGIN_MESSAGE_MAP(COGCAssistToolView, CView)
+	// 标准打印命令
+	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
+	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &COGCAssistToolView::OnFilePrintPreview)
+END_MESSAGE_MAP()
+
+// COGCAssistToolView 构造/析构
+
+COGCAssistToolView::COGCAssistToolView()
+{
+	// TODO: 在此处添加构造代码
+
+}
+
+COGCAssistToolView::~COGCAssistToolView()
+{
+}
+
+BOOL COGCAssistToolView::PreCreateWindow(CREATESTRUCT& cs)
+{
+	// TODO: 在此处通过修改
+	//  CREATESTRUCT cs 来修改窗口类或样式
+
+	return CView::PreCreateWindow(cs);
+}
+
+// COGCAssistToolView 绘制
+
+void COGCAssistToolView::OnDraw(CDC* /*pDC*/)
+{
+	COGCAssistToolDoc* pDoc = GetDocument();
+	ASSERT_VALID(pDoc);
+	if (!pDoc)
+		return;
+
+	// TODO: 在此处为本机数据添加绘制代码
+}
+
+
+// COGCAssistToolView 打印
+
+
+void COGCAssistToolView::OnFilePrintPreview()
+{
+	AFXPrintPreview(this);
+}
+
+BOOL COGCAssistToolView::OnPreparePrinting(CPrintInfo* pInfo)
+{
+	// 默认准备
+	return DoPreparePrinting(pInfo);
+}
+
+void COGCAssistToolView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
+{
+	// TODO: 添加额外的打印前进行的初始化过程
+}
+
+void COGCAssistToolView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
+{
+	// TODO: 添加打印后进行的清理过程
+}
+
+void COGCAssistToolView::OnRButtonUp(UINT nFlags, CPoint point)
+{
+	ClientToScreen(&point);
+	OnContextMenu(this, point);
+}
+
+void COGCAssistToolView::OnContextMenu(CWnd* pWnd, CPoint point)
+{
+	theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
+}
+
+
+// COGCAssistToolView 诊断
+
+#ifdef _DEBUG
+void COGCAssistToolView::AssertValid() const
+{
+	CView::AssertValid();
+}
+
+void COGCAssistToolView::Dump(CDumpContext& dc) const
+{
+	CView::Dump(dc);
+}
+
+COGCAssistToolDoc* COGCAssistToolView::GetDocument() const // 非调试版本是内联的
+{
+	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COGCAssistToolDoc)));
+	return (COGCAssistToolDoc*)m_pDocument;
+}
+#endif //_DEBUG
+
+
+// COGCAssistToolView 消息处理程序

+ 63 - 0
Source/OGCAssistTool/OGCAssistTool/OGCAssistToolView.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
+// 保留所有权利。
+
+// OGCAssistToolView.h : COGCAssistToolView 类的接口
+//
+
+
+#pragma once
+
+
+class COGCAssistToolView : public CView
+{
+protected: // 仅从序列化创建
+	COGCAssistToolView();
+	DECLARE_DYNCREATE(COGCAssistToolView)
+
+// 属性
+public:
+	COGCAssistToolDoc* 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 ~COGCAssistToolView();
+#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  // OGCAssistToolView.cpp 中的调试版本
+inline COGCAssistToolDoc* COGCAssistToolView::GetDocument() const
+   { return reinterpret_cast<COGCAssistToolDoc*>(m_pDocument); }
+#endif
+

+ 208 - 0
Source/OGCAssistTool/OGCAssistTool/OutputWnd.cpp

@@ -0,0 +1,208 @@
+// 这段 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 "OutputWnd.h"
+#include "Resource.h"
+#include "MainFrm.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// COutputBar
+
+COutputWnd::COutputWnd()
+{
+}
+
+COutputWnd::~COutputWnd()
+{
+}
+
+BEGIN_MESSAGE_MAP(COutputWnd, CDockablePane)
+	ON_WM_CREATE()
+	ON_WM_SIZE()
+END_MESSAGE_MAP()
+
+int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	m_Font.CreateStockObject(DEFAULT_GUI_FONT);
+
+	CRect rectDummy;
+	rectDummy.SetRectEmpty();
+
+	// 创建选项卡窗口:
+	if (!m_wndTabs.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, 1))
+	{
+		TRACE0("未能创建输出选项卡窗口\n");
+		return -1;      // 未能创建
+	}
+
+	// 创建输出窗格:
+	const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;
+
+	if (!m_wndOutputBuild.Create(dwStyle, rectDummy, &m_wndTabs, 2) ||
+		!m_wndOutputDebug.Create(dwStyle, rectDummy, &m_wndTabs, 3) ||
+		!m_wndOutputFind.Create(dwStyle, rectDummy, &m_wndTabs, 4))
+	{
+		TRACE0("未能创建输出窗口\n");
+		return -1;      // 未能创建
+	}
+
+	m_wndOutputBuild.SetFont(&m_Font);
+	m_wndOutputDebug.SetFont(&m_Font);
+	m_wndOutputFind.SetFont(&m_Font);
+
+	CString strTabName;
+	BOOL bNameValid;
+
+	// 将列表窗口附加到选项卡:
+	bNameValid = strTabName.LoadString(IDS_BUILD_TAB);
+	ASSERT(bNameValid);
+	m_wndTabs.AddTab(&m_wndOutputBuild, strTabName, (UINT)0);
+	bNameValid = strTabName.LoadString(IDS_DEBUG_TAB);
+	ASSERT(bNameValid);
+	m_wndTabs.AddTab(&m_wndOutputDebug, strTabName, (UINT)1);
+	bNameValid = strTabName.LoadString(IDS_FIND_TAB);
+	ASSERT(bNameValid);
+	m_wndTabs.AddTab(&m_wndOutputFind, strTabName, (UINT)2);
+
+	// 使用一些虚拟文本填写输出选项卡(无需复杂数据)
+	FillBuildWindow();
+	FillDebugWindow();
+	FillFindWindow();
+
+	return 0;
+}
+
+void COutputWnd::OnSize(UINT nType, int cx, int cy)
+{
+	CDockablePane::OnSize(nType, cx, cy);
+
+	// 选项卡控件应覆盖整个工作区:
+	m_wndTabs.SetWindowPos (NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
+}
+
+void COutputWnd::AdjustHorzScroll(CListBox& wndListBox)
+{
+	CClientDC dc(this);
+	CFont* pOldFont = dc.SelectObject(&m_Font);
+
+	int cxExtentMax = 0;
+
+	for (int i = 0; i < wndListBox.GetCount(); i ++)
+	{
+		CString strItem;
+		wndListBox.GetText(i, strItem);
+
+		cxExtentMax = max(cxExtentMax, dc.GetTextExtent(strItem).cx);
+	}
+
+	wndListBox.SetHorizontalExtent(cxExtentMax);
+	dc.SelectObject(pOldFont);
+}
+
+void COutputWnd::FillBuildWindow()
+{
+	m_wndOutputBuild.AddString(_T("生成输出正显示在此处。"));
+	m_wndOutputBuild.AddString(_T("输出正显示在列表视图的行中"));
+	m_wndOutputBuild.AddString(_T("但您可以根据需要更改其显示方式..."));
+}
+
+void COutputWnd::FillDebugWindow()
+{
+	m_wndOutputDebug.AddString(_T("调试输出正显示在此处。"));
+	m_wndOutputDebug.AddString(_T("输出正显示在列表视图的行中"));
+	m_wndOutputDebug.AddString(_T("但您可以根据需要更改其显示方式..."));
+}
+
+void COutputWnd::FillFindWindow()
+{
+	m_wndOutputFind.AddString(_T("查找输出正显示在此处。"));
+	m_wndOutputFind.AddString(_T("输出正显示在列表视图的行中"));
+	m_wndOutputFind.AddString(_T("但您可以根据需要更改其显示方式..."));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// COutputList1
+
+COutputList::COutputList()
+{
+}
+
+COutputList::~COutputList()
+{
+}
+
+BEGIN_MESSAGE_MAP(COutputList, CListBox)
+	ON_WM_CONTEXTMENU()
+	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
+	ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
+	ON_COMMAND(ID_VIEW_OUTPUTWND, OnViewOutput)
+	ON_WM_WINDOWPOSCHANGING()
+END_MESSAGE_MAP()
+/////////////////////////////////////////////////////////////////////////////
+// COutputList 消息处理程序
+
+void COutputList::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
+{
+	CMenu menu;
+	menu.LoadMenu(IDR_OUTPUT_POPUP);
+
+	CMenu* pSumMenu = menu.GetSubMenu(0);
+
+	if (AfxGetMainWnd()->IsKindOf(RUNTIME_CLASS(CMDIFrameWndEx)))
+	{
+		CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;
+
+		if (!pPopupMenu->Create(this, point.x, point.y, (HMENU)pSumMenu->m_hMenu, FALSE, TRUE))
+			return;
+
+		((CMDIFrameWndEx*)AfxGetMainWnd())->OnShowPopupMenu(pPopupMenu);
+		UpdateDialogControls(this, FALSE);
+	}
+
+	SetFocus();
+}
+
+void COutputList::OnEditCopy()
+{
+	MessageBox(_T("复制输出"));
+}
+
+void COutputList::OnEditClear()
+{
+	MessageBox(_T("清除输出"));
+}
+
+void COutputList::OnViewOutput()
+{
+	CDockablePane* pParentBar = DYNAMIC_DOWNCAST(CDockablePane, GetOwner());
+	CMDIFrameWndEx* pMainFrame = DYNAMIC_DOWNCAST(CMDIFrameWndEx, GetTopLevelFrame());
+
+	if (pMainFrame != NULL && pParentBar != NULL)
+	{
+		pMainFrame->SetFocus();
+		pMainFrame->ShowPane(pParentBar, FALSE, FALSE, FALSE);
+		pMainFrame->RecalcLayout();
+
+	}
+}
+
+

+ 69 - 0
Source/OGCAssistTool/OGCAssistTool/OutputWnd.h

@@ -0,0 +1,69 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// COutputList 窗口
+
+class COutputList : public CListBox
+{
+// 构造
+public:
+	COutputList();
+
+// 实现
+public:
+	virtual ~COutputList();
+
+protected:
+	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
+	afx_msg void OnEditCopy();
+	afx_msg void OnEditClear();
+	afx_msg void OnViewOutput();
+
+	DECLARE_MESSAGE_MAP()
+};
+
+class COutputWnd : public CDockablePane
+{
+// 构造
+public:
+	COutputWnd();
+
+// 属性
+protected:
+	CFont m_Font;
+
+	CMFCTabCtrl	m_wndTabs;
+
+	COutputList m_wndOutputBuild;
+	COutputList m_wndOutputDebug;
+	COutputList m_wndOutputFind;
+
+protected:
+	void FillBuildWindow();
+	void FillDebugWindow();
+	void FillFindWindow();
+
+	void AdjustHorzScroll(CListBox& wndListBox);
+
+// 实现
+public:
+	virtual ~COutputWnd();
+
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+
+	DECLARE_MESSAGE_MAP()
+};
+

+ 279 - 0
Source/OGCAssistTool/OGCAssistTool/PropertiesWnd.cpp

@@ -0,0 +1,279 @@
+// 这段 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 "PropertiesWnd.h"
+#include "Resource.h"
+#include "MainFrm.h"
+#include "OGCAssistTool.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+#define new DEBUG_NEW
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CResourceViewBar
+
+CPropertiesWnd::CPropertiesWnd()
+{
+}
+
+CPropertiesWnd::~CPropertiesWnd()
+{
+}
+
+BEGIN_MESSAGE_MAP(CPropertiesWnd, CDockablePane)
+	ON_WM_CREATE()
+	ON_WM_SIZE()
+	ON_COMMAND(ID_EXPAND_ALL, OnExpandAllProperties)
+	ON_UPDATE_COMMAND_UI(ID_EXPAND_ALL, OnUpdateExpandAllProperties)
+	ON_COMMAND(ID_SORTPROPERTIES, OnSortProperties)
+	ON_UPDATE_COMMAND_UI(ID_SORTPROPERTIES, OnUpdateSortProperties)
+	ON_COMMAND(ID_PROPERTIES1, OnProperties1)
+	ON_UPDATE_COMMAND_UI(ID_PROPERTIES1, OnUpdateProperties1)
+	ON_COMMAND(ID_PROPERTIES2, OnProperties2)
+	ON_UPDATE_COMMAND_UI(ID_PROPERTIES2, OnUpdateProperties2)
+	ON_WM_SETFOCUS()
+	ON_WM_SETTINGCHANGE()
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CResourceViewBar 消息处理程序
+
+void CPropertiesWnd::AdjustLayout()
+{
+	if (GetSafeHwnd() == NULL)
+	{
+		return;
+	}
+
+	CRect rectClient,rectCombo;
+	GetClientRect(rectClient);
+
+	m_wndObjectCombo.GetWindowRect(&rectCombo);
+
+	int cyCmb = rectCombo.Size().cy;
+	int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy;
+
+	m_wndObjectCombo.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width(), 200, SWP_NOACTIVATE | SWP_NOZORDER);
+	m_wndToolBar.SetWindowPos(NULL, rectClient.left, rectClient.top + cyCmb, rectClient.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);
+	m_wndPropList.SetWindowPos(NULL, rectClient.left, rectClient.top + cyCmb + cyTlb, rectClient.Width(), rectClient.Height() -(cyCmb+cyTlb), SWP_NOACTIVATE | SWP_NOZORDER);
+}
+
+int CPropertiesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	CRect rectDummy;
+	rectDummy.SetRectEmpty();
+
+	// 创建组合:
+	const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | CBS_SORT | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
+
+	if (!m_wndObjectCombo.Create(dwViewStyle, rectDummy, this, 1))
+	{
+		TRACE0("未能创建属性组合 \n");
+		return -1;      // 未能创建
+	}
+
+	m_wndObjectCombo.AddString(_T("应用程序"));
+	m_wndObjectCombo.AddString(_T("属性窗口"));
+	m_wndObjectCombo.SetFont(CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT)));
+	m_wndObjectCombo.SetCurSel(0);
+
+	if (!m_wndPropList.Create(WS_VISIBLE | WS_CHILD, rectDummy, this, 2))
+	{
+		TRACE0("未能创建属性网格\n");
+		return -1;      // 未能创建
+	}
+
+	InitPropList();
+
+	m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_PROPERTIES);
+	m_wndToolBar.LoadToolBar(IDR_PROPERTIES, 0, 0, TRUE /* 已锁定*/);
+	m_wndToolBar.CleanUpLockedImages();
+	m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons ? IDB_PROPERTIES_HC : IDR_PROPERTIES, 0, 0, TRUE /* 锁定*/);
+
+	m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
+	m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
+	m_wndToolBar.SetOwner(this);
+
+	// 所有命令将通过此控件路由,而不是通过主框架路由:
+	m_wndToolBar.SetRouteCommandsViaFrame(FALSE);
+
+	AdjustLayout();
+	return 0;
+}
+
+void CPropertiesWnd::OnSize(UINT nType, int cx, int cy)
+{
+	CDockablePane::OnSize(nType, cx, cy);
+	AdjustLayout();
+}
+
+void CPropertiesWnd::OnExpandAllProperties()
+{
+	m_wndPropList.ExpandAll();
+}
+
+void CPropertiesWnd::OnUpdateExpandAllProperties(CCmdUI* pCmdUI)
+{
+}
+
+void CPropertiesWnd::OnSortProperties()
+{
+	m_wndPropList.SetAlphabeticMode(!m_wndPropList.IsAlphabeticMode());
+}
+
+void CPropertiesWnd::OnUpdateSortProperties(CCmdUI* pCmdUI)
+{
+	pCmdUI->SetCheck(m_wndPropList.IsAlphabeticMode());
+}
+
+void CPropertiesWnd::OnProperties1()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CPropertiesWnd::OnUpdateProperties1(CCmdUI* /*pCmdUI*/)
+{
+	// TODO: 在此处添加命令更新 UI 处理程序代码
+}
+
+void CPropertiesWnd::OnProperties2()
+{
+	// TODO: 在此处添加命令处理程序代码
+}
+
+void CPropertiesWnd::OnUpdateProperties2(CCmdUI* /*pCmdUI*/)
+{
+	// TODO: 在此处添加命令更新 UI 处理程序代码
+}
+
+void CPropertiesWnd::InitPropList()
+{
+	SetPropListFont();
+
+	m_wndPropList.EnableHeaderCtrl(FALSE);
+	m_wndPropList.EnableDescriptionArea();
+	m_wndPropList.SetVSDotNetLook();
+	m_wndPropList.MarkModifiedProperties();
+
+	CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(_T("外观"));
+
+	pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("三维外观"), (_variant_t) false, _T("指定窗口的字体不使用粗体,并且控件将使用三维边框")));
+
+	CMFCPropertyGridProperty* pProp = new CMFCPropertyGridProperty(_T("边框"), _T("Dialog Frame"), _T("其中之一: 无(None)、细(Thin)、可调整大小(Resizable)、对话框外框(Dialog Frame)"));
+	pProp->AddOption(_T("None"));
+	pProp->AddOption(_T("Thin"));
+	pProp->AddOption(_T("Resizable"));
+	pProp->AddOption(_T("Dialog Frame"));
+	pProp->AllowEdit(FALSE);
+
+	pGroup1->AddSubItem(pProp);
+	pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("标题"), (_variant_t) _T("关于"), _T("指定窗口标题栏中显示的文本")));
+
+	m_wndPropList.AddProperty(pGroup1);
+
+	CMFCPropertyGridProperty* pSize = new CMFCPropertyGridProperty(_T("窗口大小"), 0, TRUE);
+
+	pProp = new CMFCPropertyGridProperty(_T("高度"), (_variant_t) 250l, _T("指定窗口的高度"));
+	pProp->EnableSpinControl(TRUE, 50, 300);
+	pSize->AddSubItem(pProp);
+
+	pProp = new CMFCPropertyGridProperty( _T("宽度"), (_variant_t) 150l, _T("指定窗口的宽度"));
+	pProp->EnableSpinControl(TRUE, 50, 200);
+	pSize->AddSubItem(pProp);
+
+	m_wndPropList.AddProperty(pSize);
+
+	CMFCPropertyGridProperty* pGroup2 = new CMFCPropertyGridProperty(_T("字体"));
+
+	LOGFONT lf;
+	CFont* font = CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT));
+	font->GetLogFont(&lf);
+
+	lstrcpy(lf.lfFaceName, _T("宋体, Arial"));
+
+	pGroup2->AddSubItem(new CMFCPropertyGridFontProperty(_T("字体"), lf, CF_EFFECTS | CF_SCREENFONTS, _T("指定窗口的默认字体")));
+	pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T("使用系统字体"), (_variant_t) true, _T("指定窗口使用“MS Shell Dlg”字体")));
+
+	m_wndPropList.AddProperty(pGroup2);
+
+	CMFCPropertyGridProperty* pGroup3 = new CMFCPropertyGridProperty(_T("杂项"));
+	pProp = new CMFCPropertyGridProperty(_T("(名称)"), _T("应用程序"));
+	pProp->Enable(FALSE);
+	pGroup3->AddSubItem(pProp);
+
+	CMFCPropertyGridColorProperty* pColorProp = new CMFCPropertyGridColorProperty(_T("窗口颜色"), RGB(210, 192, 254), NULL, _T("指定默认的窗口颜色"));
+	pColorProp->EnableOtherButton(_T("其他..."));
+	pColorProp->EnableAutomaticButton(_T("默认"), ::GetSysColor(COLOR_3DFACE));
+	pGroup3->AddSubItem(pColorProp);
+
+	static TCHAR BASED_CODE szFilter[] = _T("图标文件(*.ico)|*.ico|所有文件(*.*)|*.*||");
+	pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T("图标"), TRUE, _T(""), _T("ico"), 0, szFilter, _T("指定窗口图标")));
+
+	pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T("文件夹"), _T("c:\\")));
+
+	m_wndPropList.AddProperty(pGroup3);
+
+	CMFCPropertyGridProperty* pGroup4 = new CMFCPropertyGridProperty(_T("层次结构"));
+
+	CMFCPropertyGridProperty* pGroup41 = new CMFCPropertyGridProperty(_T("第一个子级"));
+	pGroup4->AddSubItem(pGroup41);
+
+	CMFCPropertyGridProperty* pGroup411 = new CMFCPropertyGridProperty(_T("第二个子级"));
+	pGroup41->AddSubItem(pGroup411);
+
+	pGroup411->AddSubItem(new CMFCPropertyGridProperty(_T("项 1"), (_variant_t) _T("值 1"), _T("此为说明")));
+	pGroup411->AddSubItem(new CMFCPropertyGridProperty(_T("项 2"), (_variant_t) _T("值 2"), _T("此为说明")));
+	pGroup411->AddSubItem(new CMFCPropertyGridProperty(_T("项 3"), (_variant_t) _T("值 3"), _T("此为说明")));
+
+	pGroup4->Expand(FALSE);
+	m_wndPropList.AddProperty(pGroup4);
+}
+
+void CPropertiesWnd::OnSetFocus(CWnd* pOldWnd)
+{
+	CDockablePane::OnSetFocus(pOldWnd);
+	m_wndPropList.SetFocus();
+}
+
+void CPropertiesWnd::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
+{
+	CDockablePane::OnSettingChange(uFlags, lpszSection);
+	SetPropListFont();
+}
+
+void CPropertiesWnd::SetPropListFont()
+{
+	::DeleteObject(m_fntPropList.Detach());
+
+	LOGFONT lf;
+	afxGlobalData.fontRegular.GetLogFont(&lf);
+
+	NONCLIENTMETRICS info;
+	info.cbSize = sizeof(info);
+
+	afxGlobalData.GetNonClientMetrics(info);
+
+	lf.lfHeight = info.lfMenuFont.lfHeight;
+	lf.lfWeight = info.lfMenuFont.lfWeight;
+	lf.lfItalic = info.lfMenuFont.lfItalic;
+
+	m_fntPropList.CreateFontIndirect(&lf);
+
+	m_wndPropList.SetFont(&m_fntPropList);
+}

+ 70 - 0
Source/OGCAssistTool/OGCAssistTool/PropertiesWnd.h

@@ -0,0 +1,70 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+class CPropertiesToolBar : public CMFCToolBar
+{
+public:
+	virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler)
+	{
+		CMFCToolBar::OnUpdateCmdUI((CFrameWnd*) GetOwner(), bDisableIfNoHndler);
+	}
+
+	virtual BOOL AllowShowOnList() const { return FALSE; }
+};
+
+class CPropertiesWnd : public CDockablePane
+{
+// 构造
+public:
+	CPropertiesWnd();
+
+	void AdjustLayout();
+
+// 属性
+public:
+	void SetVSDotNetLook(BOOL bSet)
+	{
+		m_wndPropList.SetVSDotNetLook(bSet);
+		m_wndPropList.SetGroupNameFullWidth(bSet);
+	}
+
+protected:
+	CFont m_fntPropList;
+	CComboBox m_wndObjectCombo;
+	CPropertiesToolBar m_wndToolBar;
+	CMFCPropertyGridCtrl m_wndPropList;
+
+// 实现
+public:
+	virtual ~CPropertiesWnd();
+
+protected:
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	afx_msg void OnExpandAllProperties();
+	afx_msg void OnUpdateExpandAllProperties(CCmdUI* pCmdUI);
+	afx_msg void OnSortProperties();
+	afx_msg void OnUpdateSortProperties(CCmdUI* pCmdUI);
+	afx_msg void OnProperties1();
+	afx_msg void OnUpdateProperties1(CCmdUI* pCmdUI);
+	afx_msg void OnProperties2();
+	afx_msg void OnUpdateProperties2(CCmdUI* pCmdUI);
+	afx_msg void OnSetFocus(CWnd* pOldWnd);
+	afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
+
+	DECLARE_MESSAGE_MAP()
+
+	void InitPropList();
+	void SetPropListFont();
+};
+

+ 87 - 0
Source/OGCAssistTool/OGCAssistTool/ReadMe.txt

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

+ 51 - 0
Source/OGCAssistTool/OGCAssistTool/ViewTree.cpp

@@ -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
+// 保留所有权利。
+
+#include "stdafx.h"
+#include "ViewTree.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CViewTree
+
+CViewTree::CViewTree()
+{
+}
+
+CViewTree::~CViewTree()
+{
+}
+
+BEGIN_MESSAGE_MAP(CViewTree, CTreeCtrl)
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CViewTree 消息处理程序
+
+BOOL CViewTree::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
+{
+	BOOL bRes = CTreeCtrl::OnNotify(wParam, lParam, pResult);
+
+	NMHDR* pNMHDR = (NMHDR*)lParam;
+	ASSERT(pNMHDR != NULL);
+
+	if (pNMHDR && pNMHDR->code == TTN_SHOW && GetToolTips() != NULL)
+	{
+		GetToolTips()->SetWindowPos(&wndTop, -1, -1, -1, -1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSIZE);
+	}
+
+	return bRes;
+}

+ 33 - 0
Source/OGCAssistTool/OGCAssistTool/ViewTree.h

@@ -0,0 +1,33 @@
+// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
+// ("Fluent UI"),该示例仅作为参考资料提供, 
+// 用以补充《Microsoft 基础类参考》和 
+// MFC C++ 库软件随附的相关电子文档。
+// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
+// 若要了解有关 Fluent UI 许可计划的详细信息,请访问  
+// http://msdn.microsoft.com/officeui。
+//
+// 版权所有 (C) Microsoft Corporation
+// 保留所有权利。
+
+#pragma once
+
+/////////////////////////////////////////////////////////////////////////////
+// CViewTree 窗口
+
+class CViewTree : public CTreeCtrl
+{
+// 构造
+public:
+	CViewTree();
+
+// 重写
+protected:
+	virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
+
+// 实现
+public:
+	virtual ~CViewTree();
+
+protected:
+	DECLARE_MESSAGE_MAP()
+};

TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/OGCAssistTool.ico


+ 13 - 0
Source/OGCAssistTool/OGCAssistTool/res/OGCAssistTool.rc2

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

TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/OGCAssistToolDoc.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/Toolbar.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/Toolbar256.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/buttons.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/class_view.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/class_view_hc.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/classview.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/classview_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/explorer.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/explorer_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/file_view.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/file_view_hc.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/filelarge.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/filesmall.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/fileview.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/fileview_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/info.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/logo.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/main.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/menuimages.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/menuimages_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/nav_large.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/nav_large_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/output_wnd.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/output_wnd_hc.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/pages.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/pages_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/pages_small.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/pages_small_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/properties.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/properties_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/properties_wnd.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/properties_wnd_hc.ico


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/sort.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/sort_hc.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/writelarge.bmp


TEMPAT SAMPAH
Source/OGCAssistTool/OGCAssistTool/res/writesmall.bmp


+ 156 - 0
Source/OGCAssistTool/OGCAssistTool/resource.h

@@ -0,0 +1,156 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by OGCAssistTool.rc
+//
+#define IDD_ABOUTBOX                    100
+#define IDP_OLE_INIT_FAILED             100
+#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_OGCAssistToolTYPE           130
+#define ID_WINDOW_MANAGER               131
+#define IDS_WINDOWS_MANAGER             132
+#define ID_VIEW_FILEVIEW                133
+#define ID_VIEW_CLASSVIEW               134
+#define ID_PROPERTIES                   135
+#define ID_OPEN                         136
+#define ID_OPEN_WITH                    137
+#define ID_DUMMY_COMPILE                138
+#define ID_CLASS_ADD_MEMBER_FUNCTION    139
+#define ID_CLASS_ADD_MEMBER_VARIABLE    140
+#define ID_CLASS_DEFINITION             141
+#define ID_CLASS_PROPERTIES             142
+#define ID_NEW_FOLDER                   143
+#define ID_SORT_MENU                    144
+#define ID_SORTING_GROUPBYTYPE          145
+#define ID_SORTING_SORTALPHABETIC       146
+#define ID_SORTING_SORTBYTYPE           147
+#define ID_SORTING_SORTBYACCESS         148
+#define ID_VIEW_OUTPUTWND               149
+#define ID_VIEW_PROPERTIESWND           150
+#define IDR_PASTE_MENU                  151
+#define ID_SORTPROPERTIES               151
+#define IDR_WINDOWS_MENU                152
+#define ID_PROPERTIES1                  152
+#define ID_PROPERTIES2                  153
+#define ID_EXPAND_ALL                   154
+#define IDS_FILE_VIEW                   155
+#define IDS_CLASS_VIEW                  156
+#define IDS_OUTPUT_WND                  157
+#define IDS_PROPERTIES_WND              158
+#define IDI_FILE_VIEW                   161
+#define IDI_FILE_VIEW_HC                162
+#define IDI_CLASS_VIEW                  163
+#define IDI_CLASS_VIEW_HC               164
+#define IDI_OUTPUT_WND                  165
+#define IDI_OUTPUT_WND_HC               166
+#define IDI_PROPERTIES_WND              167
+#define IDI_PROPERTIES_WND_HC           168
+#define IDR_EXPLORER                    169
+#define IDB_EXPLORER_24                 170
+#define IDR_SORT                        171
+#define IDB_SORT_24                     172
+#define IDR_POPUP_SORT                  173
+#define IDR_POPUP_EXPLORER              174
+#define IDB_FILE_VIEW                   175
+#define IDB_FILE_VIEW_24                176
+#define IDB_CLASS_VIEW                  177
+#define IDB_CLASS_VIEW_24               178
+#define IDR_MENU_IMAGES                 179
+#define IDB_MENU_IMAGES_24              180
+#define ID_TOOLS_MACRO                  181
+#define IDR_OUTPUT_POPUP                182
+#define IDR_PROPERTIES                  183
+#define IDB_PROPERTIES_HC               184
+#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_BUILD_TAB                   300
+#define IDS_DEBUG_TAB                   301
+#define IDS_FIND_TAB                    302
+#define IDS_EXPLORER                    305
+#define IDS_EDIT_MENU                   306
+#define DLG_LOGIN                       310
+#define IDB_LOGO                        311
+#define EDIT_ACCOUNT                    1000
+#define EDIT_PASSWORD                   1001
+#define IDC_EDIT3                       1002
+#define EDIT_LINE                       1002
+#define CHECK_OFFLINE                   1003
+#define ID_WRITE_PASTEASHYPERLINK       32770
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        312
+#define _APS_NEXT_COMMAND_VALUE         32771
+#define _APS_NEXT_CONTROL_VALUE         1004
+#define _APS_NEXT_SYMED_VALUE           310
+#endif
+#endif

+ 18 - 0
Source/OGCAssistTool/OGCAssistTool/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 : 只包括标准包含文件的源文件
+// OGCAssistTool.pch 将作为预编译头
+// stdafx.obj 将包含预编译类型信息
+
+#include "stdafx.h"
+
+

+ 77 - 0
Source/OGCAssistTool/OGCAssistTool/stdafx.h

@@ -0,0 +1,77 @@
+// 这段 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
+// 禁用OutLookBar
+#define DISABLE_OUTLOOKBAR
+
+
+
+#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
Source/OGCAssistTool/OGCAssistTool/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
+