# 技术栈与依赖 **本文档引用的文件** - [GeoMative.vcxproj](file://GeoMative.vcxproj) - [config.ini](file://config.ini) - [IOManager.cpp](file://cpp/Managers/IOManager.cpp) - [Markup.h](file://h/Markup.h) - [Markup.cpp](file://cpp/Tools/Markup.cpp) - [wke.h](file://cpp/miniblink/wke.h) - [wkeBrowser.cpp](file://cpp/miniblink/wkeBrowser.cpp) - [test.cpp](file://cpp/miniblink/test.cpp) - [msado15.tlh](file://Release/msado15.tlh) - [msadox.tlh](file://Release/msadox.tlh) - [ChildFrm.h](file://h/ChildFrm.h) - [ChildView.h](file://h/ChildView.h) ## 目录 1. [项目概述](#项目概述) 2. [MFC框架在UI构建中的作用](#mfc框架在ui构建中的作用) 3. [ADO技术在Access数据库访问中的实现方式](#ado技术在access数据库访问中的实现方式) 4. [CMarkup库在XML文件处理中的应用](#cmarkup库在xml文件处理中的应用) 5. [miniblink嵌入式浏览器组件的集成方法](#miniblink嵌入式浏览器组件的集成方法) 6. [项目构建配置分析](#项目构建配置分析) 7. [技术组件版本兼容性与集成方式](#技术组件版本兼容性与集成方式) 8. [总结](#总结) ## 项目概述 GeomativeStudio项目是一个基于Windows平台的桌面应用程序,采用Visual Studio 2015开发环境构建。项目主要技术栈包括MFC(Microsoft Foundation Classes)框架用于UI构建、ADO(ActiveX Data Objects)技术用于Access数据库访问、CMarkup库用于XML文件处理,以及miniblink嵌入式浏览器组件用于集成Web功能。项目通过GeoMative.vcxproj文件定义了详细的编译器设置和依赖项,确保了跨平台兼容性和功能完整性。 ## MFC框架在UI构建中的作用 MFC框架在GeomativeStudio项目中扮演着核心角色,负责整个应用程序的用户界面构建和管理。从项目结构可以看出,UI相关的代码主要分布在`cpp/Views`和`h/`目录下,包含了大量的对话框、视图和框架类。 项目通过MFC的文档/视图架构实现了复杂的数据管理和界面展示。`ChildFrm.h`和`ChildView.h`文件定义了MDI(多文档界面)子窗口框架和视图类,这是MFC典型的UI构建模式。`ChildFrame`类继承自`CMDIChildWnd`,作为子窗口的容器,而`CChildView`类继承自`CWnd`,负责具体的界面绘制和用户交互。 ```mermaid classDiagram class CMDIChildWnd { +PreCreateWindow() +OnCmdMsg() } class CChildFrame { +m_wndView CChildView +PreCreateWindow() +OnCmdMsg() } class CWnd { +PreCreateWindow() +OnPaint() } class CChildView { +OnPaint() } CMDIChildWnd <|-- CChildFrame : "继承" CWnd <|-- CChildView : "继承" CChildFrame --> CChildView : "包含" ``` **Diagram sources** - [ChildFrm.h](file://h/ChildFrm.h) - [ChildView.h](file://h/ChildView.h) MFC框架通过消息映射机制处理用户交互,如按钮点击、菜单选择等事件。项目中的大量对话框类(如`DailLogin.h`、`MainFrm.h`等)都使用了MFC的对话框模板和控件,实现了丰富的用户界面功能。MFC的静态链接方式(`UseOfMfc>Static`)确保了应用程序的独立性,无需在目标机器上安装MFC运行库。 **Section sources** - [ChildFrm.h](file://h/ChildFrm.h) - [ChildView.h](file://h/ChildView.h) ## ADO技术在Access数据库访问中的实现方式 GeomativeStudio项目使用ADO技术实现对Access数据库的访问,主要通过`IOManager.cpp`文件中的代码实现。项目支持Access 2007数据库文件(*.accdb),并使用Microsoft.ACE.OLEDB.12.0提供程序进行连接。 在`IOManager.cpp`文件中,可以看到数据库连接的实现代码: ```cpp _ConnectionPtr pImpConnection = NULL; CString szConnection = _T(""); szConnection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Jet OLEDB:Database Password=bsgeomative;", szFileName); pImpConnection.CreateInstance(_uuidof(Connection)); pImpConnection->Open(szConnection.AllocSysString(), "", "", adModeUnknown); ``` 项目通过`msado15.tlh`和`msadox.tlh`文件生成了ADO的类型库头文件,这些文件在编译时自动生成,提供了对ADO对象的C++封装。`msado15.tlh`文件定义了`Connection15_Deprecated`接口,包含了ConnectionString、CommandTimeout、Version等属性,以及Open、Close等方法。 ```mermaid classDiagram class Connection15_Deprecated { +ConnectionString string +CommandTimeout int +ConnectionTimeout int +Version string +Errors ErrorsPtr +DefaultDatabase string +IsolationLevel IsolationLevelEnum +Attributes int +CursorLocation CursorLocationEnum +Mode ConnectModeEnum +Provider string +State int +Open() +Close() } class Recordset { +Open() +Close() +GetFields() } Connection15_Deprecated --> Recordset : "执行查询" ``` **Diagram sources** - [msado15.tlh](file://Release/msado15.tlh) - [msadox.tlh](file://Release/msadox.tlh) 数据库连接字符串中包含了数据库密码(`Jet OLEDB:Database Password=bsgeomative;`),这表明项目使用了加密的Access数据库,增强了数据安全性。项目还通过`pRecDBVersion.CreateInstance(_uuidof(Recordset))`创建记录集对象,用于执行SQL查询和数据操作。 **Section sources** - [IOManager.cpp](file://cpp/Managers/IOManager.cpp) - [msado15.tlh](file://Release/msado15.tlh) ## CMarkup库在XML文件处理中的应用 CMarkup库在GeomativeStudio项目中用于处理XML文件,主要功能包括XML文件的读取、解析、修改和保存。项目中的`Markup.h`和`Markup.cpp`文件是CMarkup库的核心实现。 `Markup.h`文件定义了`CMarkup`类,提供了丰富的XML操作接口: - `Load()`方法用于从文件加载XML文档 - `SetDoc()`方法用于设置XML文档内容 - `FindElem()`和`FindChildElem()`方法用于查找元素 - `GetData()`和`GetChildData()`方法用于获取元素数据 - `GetAttrib()`和`GetChildAttrib()`方法用于获取属性值 - `Save()`方法用于保存XML文档 ```mermaid classDiagram class CMarkup { +Load() +SetDoc() +IsWellFormed() +FindElem() +FindChildElem() +IntoElem() +OutOfElem() +ResetChildPos() +ResetMainPos() +ResetPos() +GetTagName() +GetChildTagName() +GetData() +GetChildData() +GetElemContent() +GetAttrib() +GetChildAttrib() +GetNthAttrib() +GetAttribName() +FindNode() +GetNodeType() +SavePos() +RestorePos() +SetMapSize() +GetError() +GetResult() +GetDocFlags() } class FilePos { +FileOpen() +FileSpecifyEncoding() +FileReadText() +FileClose() } CMarkup --> FilePos : "文件操作" ``` **Diagram sources** - [Markup.h](file://h/Markup.h) - [Markup.cpp](file://cpp/Tools/Markup.cpp) `Markup.cpp`文件中的`ReadTextFile()`和`WriteTextFile()`方法实现了XML文件的读写功能,支持多种字符编码。项目通过`MCD_FSEEK`、`MCD_FTELL`等宏定义处理文件指针操作,确保了跨平台兼容性。CMarkup库的使用简化了XML文件的处理,提高了代码的可维护性和可读性。 **Section sources** - [Markup.h](file://h/Markup.h) - [Markup.cpp](file://cpp/Tools/Markup.cpp) ## miniblink嵌入式浏览器组件的集成方法 miniblink嵌入式浏览器组件在GeomativeStudio项目中用于集成Web功能,主要通过`cpp/miniblink`目录下的文件实现。`wke.h`是miniblink的核心头文件,定义了WebView、String、Point、Rect等基本类型和接口。 `wkeBrowser.cpp`文件中的代码展示了miniblink的初始化和使用: ```cpp wkeSetTransparent(g_webView, false); wkeOnTitleChanged(g_webView, onTitleChanged, NULL); wkeOnURLChanged(g_webView, onURLChanged, NULL); wkeOnNavigation(g_webView, onNavigation, NULL); wkeOnCreateView(g_webView, onBrowserCreateView, NULL); wkeOnPaintUpdated(g_webView, onPaintUpdatedCallback, NULL); wkeOnConsole(g_webView, onConsoleMessage, NULL); wkeSetUserAgent(g_webView, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.2228.0 Safari/537.36"); wkeLoadURL(g_webView, "http://github.com/weolar/miniblink49"); ``` ```mermaid classDiagram class wkeWebView { +loadURL() +loadHTML() +loadFile() +resize() +paint() +fireMouseEvent() +fireMouseWheelEvent() +fireKeyDownEvent() +runJS() +globalExec() } class wkeClientHandler { +onTitleChanged() +onURLChanged() +onNavigation() +onCreateView() +onPaintUpdated() +onConsole() } class wkeSettings { +proxy wkeProxy +mask unsigned int +extension const char* } class wkeWindowCreateInfo { +parent HWND +style DWORD +styleEx DWORD +x int +y int +width int +height int +color COLORREF } wkeWebView --> wkeClientHandler : "事件回调" wkeWebView --> wkeSettings : "配置" wkeWebView --> wkeWindowCreateInfo : "窗口创建" ``` **Diagram sources** - [wke.h](file://cpp/miniblink/wke.h) - [wkeBrowser.cpp](file://cpp/miniblink/wkeBrowser.cpp) `test.cpp`文件中的`onLoadUrlBegin()`和`onLoadUrlEnd()`回调函数实现了URL请求的拦截和处理,支持本地资源的加载和网络请求的hook。miniblink的集成使得项目能够显示Web内容、执行JavaScript代码,并与Web页面进行交互,扩展了应用程序的功能。 **Section sources** - [wke.h](file://cpp/miniblink/wke.h) - [wkeBrowser.cpp](file://cpp/miniblink/wkeBrowser.cpp) - [test.cpp](file://cpp/miniblink/test.cpp) ## 项目构建配置分析 GeomativeStudio项目的构建配置在`GeoMative.vcxproj`文件中定义,使用Visual Studio 2015(平台工具集v142)进行编译。项目支持Debug和Release两种配置,输出目录分别为`./Debug/`和`./Release/`。 ```xml Application v142 Static MultiByte ``` 项目使用静态链接MFC(`UseOfMfc>Static`),这意味着MFC库被直接编译到可执行文件中,无需在目标机器上安装MFC运行库。字符集设置为多字节(`CharacterSet>MultiByte`),支持中文等非Unicode字符。 ```xml MultiThreadedDebugDLL Disabled Level3 ./h/;./;./atlmfc/include;%(AdditionalIncludeDirectories) NDEBUG;_WIN32_WINNT=0x0601;WINVER=0x0601;WIN32;_WINDOWS;_AFXDLL;%(PreprocessorDefinitions) ./lib/;./atlmfc/lib;%(AdditionalLibraryDirectories) version.lib;imagehlp.lib;Setupapi.lib;Shlwapi.lib;strmiids.lib;ws2_32.lib;%(AdditionalDependencies) ``` 项目依赖多个Windows系统库,包括`version.lib`、`imagehlp.lib`、`Setupapi.lib`、`Shlwapi.lib`、`strmiids.lib`和`ws2_32.lib`。这些库提供了版本信息、图像处理、设备安装、字符串处理、流媒体和网络通信等功能。`AdditionalIncludeDirectories`和`AdditionalLibraryDirectories`指定了头文件和库文件的搜索路径,确保编译器能够找到所需的头文件和库文件。 **Section sources** - [GeoMative.vcxproj](file://GeoMative.vcxproj) ## 技术组件版本兼容性与集成方式 GeomativeStudio项目的技术组件具有良好的版本兼容性和集成性。MFC框架使用Visual Studio 2015的静态链接版本,确保了在Windows 7及以上版本的兼容性。ADO技术使用Microsoft.ACE.OLEDB.12.0提供程序,支持Access 2007及更高版本的数据库文件。 CMarkup库是一个轻量级的XML处理库,不依赖特定的编译器或操作系统,具有良好的跨平台兼容性。miniblink嵌入式浏览器组件基于WebKit内核,支持现代Web标准,能够在Windows平台上稳定运行。 各技术组件通过清晰的接口和模块化设计进行集成。MFC框架负责UI构建和事件处理,ADO技术负责数据库访问,CMarkup库负责XML文件处理,miniblink组件负责Web功能集成。这些组件通过C++类和函数调用进行交互,形成了一个功能完整、结构清晰的应用程序。 项目通过`config.ini`文件进行配置管理,支持语言、URL、数据导出样式、在线设备信息等设置。这种配置方式使得应用程序具有良好的可配置性和可维护性。 **Section sources** - [config.ini](file://config.ini) - [GeoMative.vcxproj](file://GeoMative.vcxproj) ## 总结 GeomativeStudio项目采用了一套成熟的技术栈,包括MFC框架、ADO技术、CMarkup库和miniblink嵌入式浏览器组件。这些技术组件各司其职,协同工作,实现了复杂的数据管理、用户界面和Web功能。项目构建配置合理,确保了跨平台兼容性和功能完整性。通过模块化设计和清晰的接口,各技术组件能够高效集成,为开发者提供了良好的开发体验和维护便利。