第7章 手把手教你学MFC之单文档和多文档

本文详细介绍了如何使用MFC创建单文档和多文档应用程序。从创建单文档应用开始,通过应用程序向导设置基类,实现了类似记事本的程序。接着,深入讲解了文档/视图结构,包括CWinApp、CDocument、CView、CDocTemplate和CFrameWnd类的角色。在单文档实战部分,展示了添加控件、响应函数和数据成员的过程。随后,转向多文档实例,通过创建新的视图类和链表管理数据,实现数据的存储和画图操作,涉及CPRetangle类的重载Serialize函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单文档界面与多文档界面

  • 单文档程序指程序只可以打开一个文档,如:记事本
  • 多文档程序指可以同时打开多个文档,如:word
创建单文档应用程序

创建单文档应用程序需要使用应用程序向导功能。使用该功能,可以方便地创建应用程序的框架。程序员可以在此基础上添加实现预定功能的代码,从而创建实现预定功能的应用程序。

  • 选择project、MFC AppWizard(exe)、single document、下一步默认。
  • 最后一步,选择基类,改变CTestView的基类为CEditView,就可以变为记事本一样的程序。
  • 单文档程序的核心:消息传递
文档/视图结构分析

文档、视图框架通过联系几个不同的类实现整个应用程序,他们分别是应用程序类CWinApp\框架窗口类CFrameWnd、视图类CView、文档类CDocument类和CDocTemplate类。

  • 主程序类CWinApp:负责进程的启动、终止、消息循环和资源管理。在整个应用程序中利用CWinApp的成员函数InitInstance进入MFC程序,同时其成员函数还包括消息循环、加载图标等。由于整个框架已经建立,一般对CWinApp不需要改变。
  • 文档类的基类CDocument:提供基本操作:设置文档标题、建立新文档、打开新文档等。在CDocument类中最重要的两个函数时SetModifiedFlag和UpdateAllViews。前者设置一个标志位,一般在文档修改时调用该函数,当文档关闭时提醒用户保存修改的内容。后者是刷新所有和文档关联的视图,以保证显示的是最新内容。
  • 文档类CView:最常用的是OnDraw,该函数在屏幕发生变化或因为焦点的变化需要重绘时调用。没有该函数,就不能保证程序切换后保证屏幕的正确显示,若想在数据更新时强制视图更新,可调用Invalidate和UpdateWindow来实现。
  • 文档模板类CDocTemplate:将独立的文档、视图和框架窗口对象联系在一起。
  • 框架窗口类CFrameWnd:负责框架窗口的维护工作,例如工具栏、菜单、状态栏的显示和更新。
单文档程序实战
  • 新建单文档test,最后一步改变CTestView类基类为CFormView类。
  • 添加控件
  • 为控件添加数据成员
  • 为按钮添加响应函数
  • 类向导,添加CStudent,选择CEdit派生,这样可以使类串行化操作。在类中添加变量信息:
// Attributes
public:
    CString add;            //家庭住址
    int     age;            //年龄
    CString name;           //姓名
    int     num;            //学号
    CString sex;            //性别
    CString tel;            //电话号码

// Operations
  • 在Student.cpp中编写函数Serialize:
void CStudent::Serialize(CArchive& ar) 
{
    if (ar.IsStoring())
    {   // storing code
        ar<<add<<age<<name<<num<<sex<<tel;      //输入文件中
    }
    else
    {   // loading code
        ar>>add>>age>>name>>num>>sex>>tel;      //从文件中读取
    }
}
  • 在Student类中声明Serialize
// Overrides
    // ClassWizard generated virtual function overrides
    //{
   
   {AFX_VIRTUAL(CStudent)
    public:
    virtual void Serialize(CArchive& ar);
    //}}AFX_VIRTUAL

// Implementation
  • 在类CTestDoc.h中添加数据成员:
#if _MSC_VER > 1000
#pragma once
<think>好的,我现在需要处理用户关于使用Visual C++进行上位机开发的资料程的查询。首先,用户提到了几个引用,其中引用[1][2]是关于MFC工程的创建控件设计布局的,引用[3]提到了C#上位机开发,而引用[4]讨论了应用程序打包。用户特别关注的是Visual C++相关的资源,可能需要更多的MFC或Win32 API的资料。 接下来,我需要确保回答符合系统级指令:使用正确的中文,数公式的格式,生成相关问题,并正确引用。用户需要结构清晰的回答,分步骤解决问题,并且保证信息可靠。现有的引用中,引用[1][2]直接相关,但都是MFC的内容,可能需要补充更多关于串口通信、多线程、打包部署的内容,如引用[4]提到的打包步骤,但用户可能需要更多VC++相关的程链接或书籍推荐。 同时,用户可能对如何开始一个VC++上位机项目、控件布局、串口通信实现、多线程处理、数据可视化、打包部署以及调试技巧等方面感兴趣。需要将这些方面分步骤说明,并确保每个部分都有对应的引用支持,例如引用[1]的MFC工程创建,引用[2]的控件设计,引用[4]的打包步骤。 生成的相关问题需要围绕这些主题展开,帮助用户进一步探索可能的需求,比如性能优化、第三方库使用、数据持久化等。需要检查是否有遗漏的关键点,比如是否提到了VS版本兼容性或社区资源,如MSDN论坛,这些对开发者也很重要。最后确保所有引用正确标注,没有格式错误。</think>### 使用 Visual C++ 进行上位机开发的资料与程整理 #### 1. **开发环境与基础框架** - **Visual C++ 与 MFC 框架**:Visual C++ 常用于开发 Windows 上位机程序,其核心是 MFC(Microsoft Foundation Classes)框架,提供丰富的 GUI 控件系统接口[^1][^2]。 - **创建 MFC 工程**: 1. 在 Visual Studio 中选择 `MFC 应用程序` 模板。 2. 配置对话框/单文档界面,勾选所需功能(如串口通信支持)[^1]。 #### 2. **界面设计与控件布局** - **控件工具箱**:通过拖拽按钮、文本框、图表等控件快速构建界面。 - **布局技巧**: - 使用 `Group Box` 分组控件。 - 通过 `属性面板` 调整控件位置样式。 - 添加事件处理函数(如按钮点击事件)[^2]。 #### 3. **串口通信实现** - **MSComm 控件**:MFC 内置串口控件,需手动添加至工程: 1. 右键工具箱 → 选择 `COM 组件` → 勾选 `Microsoft Communications Control`。 2. 配置波特率、数据位等参数[^1]。 - **数据读写示例**: ```cpp // 发送数据 m_MSComm.SetOutput(COleVariant("Hello")); // 接收数据 VARIANT data = m_MSComm.GetInput(); ``` #### 4. **多线程与性能优化** - **异步处理**:通过 `AfxBeginThread` 创建子线程处理耗时操作(如数据解析),避免界面卡顿。 - **线程安全**:使用临界区(`CCriticalSection`)或互斥量保护共享资源。 #### 5. **数据可视化与存储** - **图表库集成**:可使用第三方库(如 TeeChart)绘制实时曲线。 - **文件操作**:通过 `CFile` 类实现数据存储为 CSV 或二进制格式。 #### 6. **应用程序打包与部署** - **Release 模式编译**:生成可执行文件前切换至 Release 模式以优化性能[^4]。 - **依赖项处理**:将动态库(如 `MSVCRxxx.dll`)与可执行文件一同打包,或静态编译减少依赖。 #### 7. **调试与测试** - **断点调试**:使用 Visual Studio 的调试工具逐行排查逻辑错误。 - **虚拟串口工具**:通过 VSPD 或 COM0COM 模拟串口设备进行测试。 --- ### §§ 相关问题 §§ 1. **如何在 MFC 中实现 TCP/IP 通信?** (可结合 Windows Socket API 或第三方库如 Boost.Asio) 2. **如何优化上位机的实时数据刷新效率?** (建议使用双缓冲技术或 DirectX 渲染) 3. **Visual C++ 与 C# 在上位机开发中的优劣对比?** (C++ 性能更高但开发效率较低;C# 依赖 .NET 框架但控件更丰富[^3]) 4. **如何将上位机程序移植到新版 Visual Studio?** (需注意 MFC 版本兼容性,参考微软官方迁移指南) --- ### 推荐习资源 - **官方文档**:[MSDN MFC 程](https://docs.microsoft.com/en-us/cpp/mfc/) - **书籍**:《深入浅出 MFC》《Visual C++ 串口通信与工程应用》 - **开源项目**:GitHub 搜索 "MFC Serial Port Example" 参考实例代码。 : STM32开发 -- Visual Studio C++编写串口上位机 : 【VisualStdio】手把手你做一个上位机(1)控件设计布局 : 使用VisualStudio制作上位机(六)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值