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

404 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>
**本文档引用的文件**
- [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应用程序的用户界面功能。