|
在 MFC 中实现项目保存与加载功能,推荐使用**文档-视图架构**(Document/View)。以下是简明实现步骤:
---
### 1. 在文档类存储数据
在 `CYourDoc.h` 中声明变量存储数据:
- class CYourDoc : public CDocument {
- public:
- CString m_strInput; // 存储文本框数据
- double m_dResult; // 存储计算结果
- // ... 其他数据成员
- };
复制代码
---
### 2. 重写文档序列化函数
在 `CYourDoc.cpp` 中实现 `Serialize()`:
- void CYourDoc::Serialize(CArchive& ar) {
- if (ar.IsStoring()) { // 保存数据
- ar << m_strInput;
- ar << m_dResult;
- } else { // 加载数据
- ar >> m_strInput;
- ar >> m_dResult;
- }
- }
复制代码
---
### 3. 视图类与文档交互
在视图类 `CYourView.cpp` 中:
#### (1) 初始化时加载数据
- void CYourView::OnInitialUpdate() {
- CView::OnInitialUpdate();
- CYourDoc* pDoc = GetDocument();
-
- // 将文档数据加载到控件
- m_editInput.SetWindowText(pDoc->m_strInput);
-
- CString strResult;
- strResult.Format(_T("%.2f"), pDoc->m_dResult);
- m_editResult.SetWindowText(strResult);
- }
复制代码
#### (2) 用户输入时更新文档
- void CYourView::OnEnChangeEditInput() {
- CYourDoc* pDoc = GetDocument();
-
- // 更新文档数据
- CString strInput;
- m_editInput.GetWindowText(strInput);
- pDoc->m_strInput = strInput;
-
- pDoc->SetModifiedFlag(TRUE); // 标记文档已修改
- }
复制代码
#### (3) 计算结果后保存到文档
- void CYourView::OnBnClickedCalculate() {
- // ... 执行计算逻辑
- double result = CalculateSomething();
-
- // 更新文档
- CYourDoc* pDoc = GetDocument();
- pDoc->m_dResult = result;
- pDoc->SetModifiedFlag(TRUE);
- }
复制代码
---
### 4. 关键点说明
1. **自动保存提示**
调用 `SetModifiedFlag(TRUE)` 后,关闭文档时 MFC 会自动弹出保存提示。
2. **文件操作**
- 点击保存:自动调用 `Serialize()` 存储数据
- 点击打开:自动调用 `Serialize()` 加载数据
- 文件扩展名需在 `CYourApp::InitInstance()` 中注册
3. **控件变量**
通过 ClassWizard 为编辑框添加控件变量(如 `m_editInput`)。
---
### 示例工作流程
1. 用户输入数据 → 实时更新到 `CYourDoc`
2. 用户点击保存 → MFC 自动触发 `Serialize()` 保存所有数据
3. 重新打开文件 → `Serialize()` 加载数据 → `OnInitialUpdate()` 初始化界面
---
通过此设计,MFC 会自动处理文件对话框、读写流程等底层操作,您只需专注数据存储与界面同步。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|