鱼C论坛

 找回密码
 立即注册
查看: 23|回复: 1

MFC 项目保存与加载

[复制链接]
发表于 5 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用MFC创建了应用程序。想实现的功能:与现在的一些软件一样,在点击保存项目时可以保存当前项目中所有数据,包括文本框中的输入的数据,以及计算的结果数据,下一次打开该项目,数据能自动加载。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 5 小时前 | 显示全部楼层
在 MFC 中实现项目保存与加载功能,推荐使用**文档-视图架构**(Document/View)。以下是简明实现步骤:

---

### 1. 在文档类存储数据
在 `CYourDoc.h` 中声明变量存储数据:
  1. class CYourDoc : public CDocument {
  2. public:
  3.     CString m_strInput;   // 存储文本框数据
  4.     double  m_dResult;    // 存储计算结果
  5.     // ... 其他数据成员
  6. };
复制代码


---

### 2. 重写文档序列化函数
在 `CYourDoc.cpp` 中实现 `Serialize()`:
  1. void CYourDoc::Serialize(CArchive& ar) {
  2.     if (ar.IsStoring()) { // 保存数据
  3.         ar << m_strInput;
  4.         ar << m_dResult;
  5.     } else { // 加载数据
  6.         ar >> m_strInput;
  7.         ar >> m_dResult;
  8.     }
  9. }
复制代码


---

### 3. 视图类与文档交互
在视图类 `CYourView.cpp` 中:
#### (1) 初始化时加载数据
  1. void CYourView::OnInitialUpdate() {
  2.     CView::OnInitialUpdate();
  3.     CYourDoc* pDoc = GetDocument();
  4.    
  5.     // 将文档数据加载到控件
  6.     m_editInput.SetWindowText(pDoc->m_strInput);
  7.    
  8.     CString strResult;
  9.     strResult.Format(_T("%.2f"), pDoc->m_dResult);
  10.     m_editResult.SetWindowText(strResult);
  11. }
复制代码


#### (2) 用户输入时更新文档
  1. void CYourView::OnEnChangeEditInput() {
  2.     CYourDoc* pDoc = GetDocument();
  3.    
  4.     // 更新文档数据
  5.     CString strInput;
  6.     m_editInput.GetWindowText(strInput);
  7.     pDoc->m_strInput = strInput;
  8.    
  9.     pDoc->SetModifiedFlag(TRUE); // 标记文档已修改
  10. }
复制代码


#### (3) 计算结果后保存到文档
  1. void CYourView::OnBnClickedCalculate() {
  2.     // ... 执行计算逻辑
  3.     double result = CalculateSomething();
  4.    
  5.     // 更新文档
  6.     CYourDoc* pDoc = GetDocument();
  7.     pDoc->m_dResult = result;
  8.     pDoc->SetModifiedFlag(TRUE);
  9. }
复制代码


---

### 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 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表