Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

307 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 技术栈与依赖
<cite>
**本文档引用的文件**
- [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)
</cite>
## 目录
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开发环境构建。项目主要技术栈包括MFCMicrosoft Foundation Classes)框架用于UI构建、ADOActiveX 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</UseOfMfc>`)确保了应用程序的独立性,无需在目标机器上安装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
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
```
项目使用静态链接MFC`UseOfMfc>Static</UseOfMfc>`),这意味着MFC库被直接编译到可执行文件中,无需在目标机器上安装MFC运行库。字符集设置为多字节(`CharacterSet>MultiByte</CharacterSet>`),支持中文等非Unicode字符。
```xml
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<Optimization>Disabled</Optimization>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>./h/;./;./atlmfc/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_WIN32_WINNT=0x0601;WINVER=0x0601;WIN32;_WINDOWS;_AFXDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>./lib/;./atlmfc/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>version.lib;imagehlp.lib;Setupapi.lib;Shlwapi.lib;strmiids.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
```
项目依赖多个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功能。项目构建配置合理,确保了跨平台兼容性和功能完整性。通过模块化设计和清晰的接口,各技术组件能够高效集成,为开发者提供了良好的开发体验和维护便利。