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

13 KiB
Raw Permalink Blame History

技术栈与依赖

**本文档引用的文件** - [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构建中的作用
  3. ADO技术在Access数据库访问中的实现方式
  4. CMarkup库在XML文件处理中的应用
  5. 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/Viewsh/目录下,包含了大量的对话框、视图和框架类。

项目通过MFC的文档/视图架构实现了复杂的数据管理和界面展示。ChildFrm.hChildView.h文件定义了MDI(多文档界面)子窗口框架和视图类,这是MFC典型的UI构建模式。ChildFrame类继承自CMDIChildWnd,作为子窗口的容器,而CChildView类继承自CWnd,负责具体的界面绘制和用户交互。

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

MFC框架通过消息映射机制处理用户交互,如按钮点击、菜单选择等事件。项目中的大量对话框类(如DailLogin.hMainFrm.h等)都使用了MFC的对话框模板和控件,实现了丰富的用户界面功能。MFC的静态链接方式(UseOfMfc>Static</UseOfMfc>)确保了应用程序的独立性,无需在目标机器上安装MFC运行库。

Section sources

ADO技术在Access数据库访问中的实现方式

GeomativeStudio项目使用ADO技术实现对Access数据库的访问,主要通过IOManager.cpp文件中的代码实现。项目支持Access 2007数据库文件(*.accdb),并使用Microsoft.ACE.OLEDB.12.0提供程序进行连接。

IOManager.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.tlhmsadox.tlh文件生成了ADO的类型库头文件,这些文件在编译时自动生成,提供了对ADO对象的C++封装。msado15.tlh文件定义了Connection15_Deprecated接口,包含了ConnectionString、CommandTimeout、Version等属性,以及Open、Close等方法。

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

数据库连接字符串中包含了数据库密码(Jet OLEDB:Database Password=bsgeomative;),这表明项目使用了加密的Access数据库,增强了数据安全性。项目还通过pRecDBVersion.CreateInstance(_uuidof(Recordset))创建记录集对象,用于执行SQL查询和数据操作。

Section sources

CMarkup库在XML文件处理中的应用

CMarkup库在GeomativeStudio项目中用于处理XML文件,主要功能包括XML文件的读取、解析、修改和保存。项目中的Markup.hMarkup.cpp文件是CMarkup库的核心实现。

Markup.h文件定义了CMarkup类,提供了丰富的XML操作接口:

  • Load()方法用于从文件加载XML文档
  • SetDoc()方法用于设置XML文档内容
  • FindElem()FindChildElem()方法用于查找元素
  • GetData()GetChildData()方法用于获取元素数据
  • GetAttrib()GetChildAttrib()方法用于获取属性值
  • Save()方法用于保存XML文档
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.cpp文件中的ReadTextFile()WriteTextFile()方法实现了XML文件的读写功能,支持多种字符编码。项目通过MCD_FSEEKMCD_FTELL等宏定义处理文件指针操作,确保了跨平台兼容性。CMarkup库的使用简化了XML文件的处理,提高了代码的可维护性和可读性。

Section sources

miniblink嵌入式浏览器组件的集成方法

miniblink嵌入式浏览器组件在GeomativeStudio项目中用于集成Web功能,主要通过cpp/miniblink目录下的文件实现。wke.h是miniblink的核心头文件,定义了WebView、String、Point、Rect等基本类型和接口。

wkeBrowser.cpp文件中的代码展示了miniblink的初始化和使用:

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");
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

test.cpp文件中的onLoadUrlBegin()onLoadUrlEnd()回调函数实现了URL请求的拦截和处理,支持本地资源的加载和网络请求的hook。miniblink的集成使得项目能够显示Web内容、执行JavaScript代码,并与Web页面进行交互,扩展了应用程序的功能。

Section sources

项目构建配置分析

GeomativeStudio项目的构建配置在GeoMative.vcxproj文件中定义,使用Visual Studio 2015(平台工具集v142)进行编译。项目支持Debug和Release两种配置,输出目录分别为./Debug/./Release/

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <PlatformToolset>v142</PlatformToolset>
    <UseOfMfc>Static</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>

项目使用静态链接MFCUseOfMfc>Static</UseOfMfc>),这意味着MFC库被直接编译到可执行文件中,无需在目标机器上安装MFC运行库。字符集设置为多字节(CharacterSet>MultiByte</CharacterSet>),支持中文等非Unicode字符。

<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.libimagehlp.libSetupapi.libShlwapi.libstrmiids.libws2_32.lib。这些库提供了版本信息、图像处理、设备安装、字符串处理、流媒体和网络通信等功能。AdditionalIncludeDirectoriesAdditionalLibraryDirectories指定了头文件和库文件的搜索路径,确保编译器能够找到所需的头文件和库文件。

Section sources

技术组件版本兼容性与集成方式

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

总结

GeomativeStudio项目采用了一套成熟的技术栈,包括MFC框架、ADO技术、CMarkup库和miniblink嵌入式浏览器组件。这些技术组件各司其职,协同工作,实现了复杂的数据管理、用户界面和Web功能。项目构建配置合理,确保了跨平台兼容性和功能完整性。通过模块化设计和清晰的接口,各技术组件能够高效集成,为开发者提供了良好的开发体验和维护便利。