13 KiB
技术栈与依赖
**本文档引用的文件** - [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)目录
- 项目概述
- MFC框架在UI构建中的作用
- ADO技术在Access数据库访问中的实现方式
- CMarkup库在XML文件处理中的应用
- miniblink嵌入式浏览器组件的集成方法
- 项目构建配置分析
- 技术组件版本兼容性与集成方式
- 总结
项目概述
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,负责具体的界面绘制和用户交互。
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.h、MainFrm.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.tlh和msadox.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.h和Markup.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_FSEEK、MCD_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>
项目使用静态链接MFC(UseOfMfc>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.lib、imagehlp.lib、Setupapi.lib、Shlwapi.lib、strmiids.lib和ws2_32.lib。这些库提供了版本信息、图像处理、设备安装、字符串处理、流媒体和网络通信等功能。AdditionalIncludeDirectories和AdditionalLibraryDirectories指定了头文件和库文件的搜索路径,确保编译器能够找到所需的头文件和库文件。
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功能。项目构建配置合理,确保了跨平台兼容性和功能完整性。通过模块化设计和清晰的接口,各技术组件能够高效集成,为开发者提供了良好的开发体验和维护便利。