This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
@@ -0,0 +1,404 @@
# 用户界面指南
<cite>
**本文档引用的文件**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp)
- [MainFrm.h](file://h/MainFrm.h)
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
- [devmngframe.h](file://h/devmngframe.h)
- [datamngframe.cpp](file://cpp/Views/datamngframe.cpp)
- [datamngframe.h](file://h/datamngframe.h)
- [sptmngframe.cpp](file://cpp/Views/sptmngframe.cpp)
- [sptmngframe.h](file://h/sptmngframe.h)
- [navdevview.h](file://h/navdevview.h)
- [navdataview.h](file://h/navdataview.h)
- [blankview.cpp](file://cpp/Views/blankview.cpp)
- [blankview.h](file://h/blankview.h)
- [GeoMative.rc2](file://res/GeoMative.rc2)
</cite>
## 目录
1. [简介](#简介)
2. [主框架窗口布局](#主框架窗口布局)
3. [主要功能框架](#主要功能框架)
4. [UI组件职责与交互](#ui组件职责与交互)
5. [界面状态管理与消息处理](#界面状态管理与消息处理)
6. [多窗口协作机制](#多窗口协作机制)
7. [MFC资源文件说明](#mfc资源文件说明)
8. [用户导航指导](#用户导航指导)
9. [开发者扩展方法](#开发者扩展方法)
## 简介
Geomative Studio应用程序采用MFCMicrosoft Foundation Classes)框架构建,实现了多文档界面(MDI)架构。该应用程序主要包含设备管理、数据管理和任务管理三大功能模块,通过主框架窗口(CMainFrame)统一调度和管理各个子窗口。系统采用树形导航视图与内容视图分离的设计模式,左侧为导航树(CNavDevView、CNavDataView等),右侧为内容展示区,通过CSplitterWnd实现窗口分割。应用程序支持中文和英文双语界面切换,并通过消息映射机制处理用户交互和系统事件。
**Section sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L1-L800)
- [MainFrm.h](file://h/MainFrm.h#L1-L120)
## 主框架窗口布局
主框架窗口(CMainFrame)继承自CMDIFrameWnd,作为整个应用程序的容器窗口,负责管理所有子窗口的创建、激活和销毁。其布局结构如下:
```mermaid
graph TD
A[CMainFrame] --> B[工具栏 m_wndToolBar]
A --> C[状态栏 m_wndStatusBar]
A --> D[MDI客户区]
D --> E[CDevMngFrame]
D --> F[CDataMngFrame]
D --> G[CSptMngFrame]
B --> H[图标按钮]
C --> I[状态指示器]
```
**Diagram sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L164-L190)
- [MainFrm.h](file://h/MainFrm.h#L56-L57)
主框架在OnCreate方法中创建了工具栏和状态栏。工具栏包含多个图标按钮,用于快速访问常用功能;状态栏位于窗口底部,显示当前状态信息。MDI客户区用于容纳和管理多个子窗口,如设备管理框架、数据管理框架和任务管理框架。通过消息映射,主框架响应菜单命令和系统消息,实现窗口的创建和调度。
**Section sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L164-L223)
- [MainFrm.h](file://h/MainFrm.h#L56-L57)
## 主要功能框架
应用程序包含三个主要功能框架:设备管理框架(CDevMngFrame)、数据管理框架(CDataMngFrame)和任务管理框架(CSptMngFrame),均继承自CMDIChildWnd。
### 设备管理框架
设备管理框架(CDevMngFrame)负责设备的注册、参数配置和状态监控。其布局采用CSplitterWnd分割为左右两部分:
```mermaid
graph TD
A[CDevMngFrame] --> B[左侧: CNavDevView]
A --> C[右侧: m_pAppDevView]
C --> D[CAppDevView]
C --> E[CAppDevOLView]
C --> F[CBlankView]
B --> G[设备树 m_devTree]
D --> H[设备详细信息列表]
D --> I[设备内容列表]
E --> J[在线设备详细信息]
E --> K[在线设备GR列表]
```
**Diagram sources**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L136-L146)
- [devmngframe.h](file://h/devmngframe.h#L84)
左侧的CNavDevView包含一个CTreeCtrl控件(m_devTree),用于显示设备树形结构。右侧的内容视图根据设备状态动态切换:当设备处于离线状态时显示CAppDevView;在线状态时显示CAppDevOLView;无选中设备时显示CBlankView。框架通过ShowAppView方法实现视图的动态切换。
**Section sources**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L258-L327)
- [devmngframe.h](file://h/devmngframe.h#L81-L82)
### 数据管理框架
数据管理框架(CDataMngFrame)负责项目、测区和测量数据的管理。其布局结构与设备管理框架类似:
```mermaid
graph TD
A[CDataMngFrame] --> B[左侧: CNavDataView]
A --> C[右侧: m_pAppDataView]
C --> D[CAppDataProView]
C --> E[CAppDataTzView]
C --> F[CAppDataRsp2DTdView]
C --> G[CAppDataIpsp2DTdView]
C --> H[CAppDataSP2DTdView]
C --> I[CAppDataRspCETdView]
C --> J[CAppDataIpspCETdView]
C --> K[CAppDataSPCETdView]
C --> L[CAppDataRsp3DTdView]
C --> M[CAppDataIpsp3DTdView]
C --> N[CAppDataSP3DTdView]
C --> O[CBlankView]
B --> P[数据树 m_dataTree]
```
**Diagram sources**
- [datamngframe.cpp](file://cpp/Views/datamngframe.cpp#L183-L193)
- [datamngframe.h](file://h/datamngframe.h#L143)
右侧内容视图根据选中节点的类型动态切换,支持项目、测区以及多种类型的测量数据(2D、3D、CE等)的展示。框架通过ShowAppView方法根据数据类型创建相应的视图。
**Section sources**
- [datamngframe.cpp](file://cpp/Views/datamngframe.cpp#L604-L800)
- [datamngframe.h](file://h/datamngframe.h#L141)
### 任务管理框架
任务管理框架(CSptMngFrame)负责测量任务的创建和管理。其结构与前述框架类似,包含导航视图和内容视图:
```mermaid
graph TD
A[CSptMngFrame] --> B[左侧: CNavSptView]
A --> C[右侧: m_pAppSptView]
C --> D[CAppSptView]
C --> E[CAppSptOLView]
C --> F[CBlankView]
```
**Diagram sources**
- [sptmngframe.h](file://h/sptmngframe.h#L78)
该框架支持创建标准和非标准的测量脚本,并提供脚本浏览和管理功能。
**Section sources**
- [sptmngframe.cpp](file://cpp/Views/sptmngframe.cpp#L17-L36)
- [sptmngframe.h](file://h/sptmngframe.h#L78)
## UI组件职责与交互
应用程序的UI组件遵循MVCModel-View-Controller)设计模式,各组件职责明确。
### 导航视图组件
导航视图(CNavDevView、CNavDataView)负责显示树形结构数据,继承自CFormView。其主要职责包括:
```mermaid
classDiagram
class CNavDevView {
+CTreeCtrl m_devTree
+OnInitialUpdate()
+DoDataExchange()
+OnRclickNavDevTree()
+OnSelchangedNavDevTree()
+OnSelchangingNavDevTree()
}
class CNavDataView {
+CTreeCtrl m_dataTree
+OnInitialUpdate()
+DoDataExchange()
+OnRclickNavDataTree()
+OnSelchangedNavDataTree()
+OnSelchangingNavDataTree()
}
CNavDevView <|-- CFormView
CNavDataView <|-- CFormView
```
**Diagram sources**
- [navdevview.h](file://h/navdevview.h#L17-L70)
- [navdataview.h](file://h/navdataview.h#L19-L74)
这些视图通过OnInitialUpdate方法初始化树形控件,通过消息映射处理右键点击、选择改变等用户交互事件,并向父框架发送调度消息。
### 内容视图组件
内容视图(CAppDevView、CAppDataProView等)负责显示具体数据内容,继承自CView。其主要职责包括:
```mermaid
classDiagram
class CAppDevView {
+CView* m_pDevDetailListView
+CView* m_pDevContentListView
+OnDraw()
+OnSize()
}
class CAppDataProView {
+CView* m_pProDetailListView
+CView* m_pProContentListView
+OnDraw()
+OnSize()
}
CAppDevView <|-- CView
CAppDataProView <|-- CView
```
**Diagram sources**
- [appdevview.h](file://h/appdevview.h#L13-L60)
- [appdatadevview.h](file://h/appdatadevview.h#L16-L64)
这些视图通常包含一个CSplitterWnd,用于进一步分割窗口,显示详细信息列表和内容列表。
### 空白视图组件
CBlankView是一个占位视图,用于在没有选中任何项目时显示空白区域:
```mermaid
classDiagram
class CBlankView {
+CBlankView()
+~CBlankView()
+DoDataExchange()
+AssertValid()
+Dump()
}
CBlankView <|-- CFormView
```
**Diagram sources**
- [blankview.cpp](file://cpp/Views/blankview.cpp#L1-L63)
- [blankview.h](file://h/blankview.h#L17-L63)
**Section sources**
- [blankview.cpp](file://cpp/Views/blankview.cpp#L1-L63)
- [blankview.h](file://h/blankview.h#L17-L63)
## 界面状态管理与消息处理
应用程序通过消息映射和状态管理机制实现复杂的用户交互。
### 消息处理机制
主框架和各子框架通过MFC的消息映射机制处理各种消息:
```mermaid
sequenceDiagram
participant User as 用户
participant MainFrame as CMainFrame
participant DevFrame as CDevMngFrame
participant DataFrame as CDataMngFrame
User->>MainFrame : 点击"设备管理"菜单
MainFrame->>MainFrame : OnMngDevWin()
MainFrame->>DevFrame : CreateNewChild()
DevFrame->>DevFrame : OnCreateClient()
DevFrame->>DevFrame : 创建分割窗口和视图
User->>DevFrame : 在设备树中选择设备
DevFrame->>DevFrame : OnSelchangedNavDevTree()
DevFrame->>DevFrame : OnSchedule()
DevFrame->>DevFrame : ShowAppView()
DevFrame->>MainFrame : 发送状态更新消息
```
**Diagram sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L624-L668)
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L212-L240)
### 状态管理
应用程序定义了多种状态常量来管理界面状态:
```mermaid
stateDiagram-v2
[*] --> PZ_STATE_NEW
[*] --> PZ_STATE_ONLINE
[*] --> PZ_STATE_OFFLINE
[*] --> PZ_STATE_ZERO
PZ_STATE_NEW --> PZ_STATE_ONLINE : 注册成功
PZ_STATE_NEW --> PZ_STATE_OFFLINE : 注册失败
PZ_STATE_ONLINE --> PZ_STATE_OFFLINE : 设备断开
PZ_STATE_OFFLINE --> PZ_STATE_ONLINE : 设备重连
PZ_STATE_OFFLINE --> PZ_STATE_NEW : 重新注册
```
**Diagram sources**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L258-L327)
- [datamngframe.cpp](file://cpp/Views/datamngframe.cpp#L604-L800)
**Section sources**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L258-L327)
- [datamngframe.cpp](file://cpp/Views/datamngframe.cpp#L604-L800)
## 多窗口协作机制
应用程序通过父-子窗口协作机制实现多窗口间的通信和数据共享。
### 窗口创建与激活
主框架通过CreateNewChild方法创建子窗口:
```mermaid
flowchart TD
Start([开始]) --> CheckNull["检查 m_pDevMngFrm 是否为空"]
CheckNull --> |为空| CreateChild["创建 CDevMngFrame 子窗口"]
CheckNull --> |不为空| ActivateFrame["激活现有窗口"]
CreateChild --> ShowWindow["显示窗口最大化"]
ActivateFrame --> End([结束])
ShowWindow --> End
```
**Diagram sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L624-L635)
### 消息传递
子窗口通过SendMessage向主框架发送消息,实现状态同步:
```mermaid
sequenceDiagram
participant DevFrame as CDevMngFrame
participant MainFrame as CMainFrame
DevFrame->>DevFrame : OnMDIActivate(TRUE)
DevFrame->>MainFrame : SendMessage(WM_SCHEDULE)
MainFrame->>MainFrame : 更新工具栏和菜单状态
DevFrame->>MainFrame : SendMessage(WM_REFRESH_NAV_DEVICE)
MainFrame->>DevFrame : 刷新设备树
```
**Diagram sources**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L151-L195)
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L64-L94)
**Section sources**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L151-L195)
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L64-L94)
## MFC资源文件说明
MFC资源文件定义了应用程序的界面元素。
### 资源文件结构
GeoMative.rc2文件是MFC资源文件,包含手动编辑的资源:
```mermaid
erDiagram
RESOURCE_FILE {
string name "GeoMative.rc2"
string type "MFC Resource File"
string description "手动编辑的资源文件"
}
DIALOG_TEMPLATE {
int id "IDD_NAV_DEV"
string title "设备导航"
string type "CFormView"
}
DIALOG_TEMPLATE {
int id "IDD_NAV_DATA"
string title "数据导航"
string type "CFormView"
}
DIALOG_TEMPLATE {
int id "IDD_BLANK"
string title "空白视图"
string type "CFormView"
}
RESOURCE_FILE ||--o{ DIALOG_TEMPLATE : "包含"
```
**Diagram sources**
- [GeoMative.rc2](file://res/GeoMative.rc2#L1-L14)
**Section sources**
- [GeoMative.rc2](file://res/GeoMative.rc2#L1-L14)
这些对话框模板在相应的视图类中通过AFX_DATA宏引用,如CNavDevView中的IDD = IDD_NAV_DEV。
## 用户导航指导
用户可以通过以下步骤进行界面导航:
1. **启动应用程序**:程序启动时显示启动画面,自动检测连接的设备。
2. **访问功能模块**
- 点击菜单"设备管理"打开设备管理窗口
- 点击菜单"数据管理"打开数据管理窗口
- 点击菜单"任务管理"打开任务管理窗口
3. **设备管理**
- 在左侧设备树中选择设备
- 右侧显示设备详细信息
- 通过右键菜单进行设备注册、参数修改等操作
4. **数据管理**
- 在左侧数据树中选择项目或测区
- 右侧显示相应的测量数据列表
- 可以进行数据导出、删除等操作
5. **任务管理**
- 创建新的测量任务
- 配置任务参数
- 生成测量脚本
## 开发者扩展方法
开发者可以通过以下方式扩展应用程序功能:
### 添加新的功能框架
1. 创建新的MDI子窗口类,继承自CMDIChildWnd
2. 实现OnCreateClient方法,创建分割窗口和视图
3. 在主框架中添加菜单命令和消息处理函数
4. 实现窗口创建和激活逻辑
### 扩展现有视图
1. 在现有视图类中添加新的控件成员变量
2. 在对话框资源中添加相应的控件
3. 在DoDataExchange方法中添加DDX/DDV绑定
4. 添加消息处理函数处理用户交互
### 添加新的消息类型
1. 定义新的WM_USER消息常量
2. 在消息映射中添加新的消息处理条目
3. 实现消息处理函数
4. 在需要的地方发送消息
通过遵循MFC框架的设计模式和应用程序的现有架构,开发者可以有效地扩展和维护Geomative Studio应用程序的用户界面功能。