当前位置: 首页 > news >正文

windows应用(vc++2022)MFC基础到实战(2)

目录

    • 向导和资源编辑器
      • 使用 MFC 应用程序向导创建 MFC 应用程序
      • 使用类视图管理类和 Windows 消息
      • 使用资源编辑器创建和编辑资源
    • 生成 MFC 应用程序的操作
      • 1.创建一个主干应用程序。
      • 2.了解即使在不添加你自己的任何一行代码的情况下,框架和 MFC 应用程序向导也能提供的内容。
      • 3.构造应用程序的用户界面。
      • 4.将菜单映射到处理程序函数。
      • 5. 编写处理程序代码。
      • 6.将工具栏按钮映射到命令。
      • 7.测试处理程序函数。
      • 8.添加对话框。
      • 9. 初始化、验证和检索对话框数据。
      • 10.创建其他类。
      • 11.将可以立即使用的组件添加到应用程序。
      • 12.实现文档类。
      • 13.实现“打开”、“保存”和“另存为”命令。
      • 14.实现视图类。
      • 15. 增强默认打印。
      • 16.添加滚动。
      • 17. 创建窗体视图。
      • 18.创建数据库窗体。
      • 19.创建简单文本编辑器。
      • 10.增加拆分窗口
    • 生成、测试和调试应用程序。
      • 1.创建 COM 组件。
      • 2.从头开始创建容器应用程序。
      • 3.从头开始创建支持自动化的应用程序。

向导和资源编辑器

Visual C++ 包含多个在 MFC 编程中使用的向导,以及许多集成资源编辑器。 对于 ActiveX 控件编程,ActiveX 控件向导的作用与 MFC 应用程序向导非常类似。 虽然可以在不使用其中大多数工具的情况下编写 MFC 应用程序,但这些工具可大大简化和加速工作。

使用 MFC 应用程序向导创建 MFC 应用程序

使用 MFC 应用程序向导可在 Visual C++ 中创建 MFC 项目,其中可以包含 OLE 和数据库支持。 项目中的文件包含应用程序、文档、视图和框架窗口类;标准资源,包括菜单和可选工具栏;其他必需的 Windows 文件;以及包含标准 Windows 帮助主题的可选 .rtf 文件,你可以修订和扩充这些主题以创建程序的帮助文件。

使用类视图管理类和 Windows 消息

类视图可帮助你为 Windows 消息和命令创建处理程序函数、创建和管理类、创建类成员变量、创建自动化方法和属性、创建数据库类等。

类视图还可帮助替代 MFC 类中的虚拟函数。 选择要替代的类和虚拟函数。 此过程的其余部分类似于消息处理,如以下段落中所述。

在 Windows 下运行的应用程序由消息驱动。 在正在运行的程序中发生的用户操作和其他事件会使 Windows 将消息发送到程序中的窗口。 例如,如果用户在窗口中单击鼠标,则 Windows 会在按鼠标左键时发送 WM_LBUTTONDOWN 消息,在释放按钮时发送 WM_LBUTTONUP 消息。 当用户从菜单栏中选择命令时,Windows 还会发送 WM_COMMAND 消息。

在 MFC 框架中,各种对象(如文档、视图、框架窗口、文档模板和应用程序对象)可以“处理”消息。 此类对象会提供“处理程序函数”作为其成员函数之一,框架会将传入消息映射到其处理程序。

编程任务的很大一部分是选择哪些消息要映射到哪些对象,然后实现该映射。 为此,可使用类视图和类向导。

类向导会创建空消息处理程序成员函数,你会使用源代码编辑器实现处理程序的主体。 你还可以使用类视图创建或编辑类(包括你自己的类,而不是派生自 MFC 类)及其成员。
在使用 MFC 框架配置应用程序时,你的角色是提供特定于应用程序的源代码,并通过定义组件响应的消息和命令来连接组件。 可以使用 C++ 语言和标准 C++ 技术从类库提供的类派生自己的特定于应用程序的类,并替代和扩充基类的行为。

使用资源编辑器创建和编辑资源

使用 Visual C++ 资源编辑器可创建和编辑菜单、对话框、自定义控件、快捷键、位图、图标、游标、字符串和版本资源。 从 Visual C++ 版本 4.0 起,工具栏编辑器使创建工具栏变得更加容易。

为了更好地帮助你,Microsoft 基础类库提供了一个名为 COMMON.RES 的文件,它包含你可从 COMMON.RES 复制并粘贴到自己的资源文件中的“剪贴画”资源。 COMMON.RES 包含工具栏按钮、常用游标、图标等。 可以在应用程序中使用、修改和重新分发这些资源。

MFC 应用程序向导、Visual C++ 向导、资源编辑器和 MFC 框架可为你完成大量工作,使管理代码更加容易。 大部分特定于应用程序的代码处于文档和视图类中。

生成 MFC 应用程序的操作

1.创建一个主干应用程序。

运行 MFC 应用程序向导。 在选项页中指定您需要的选项。 选项包括使应用程序成为 COM 组件、容器或两者;添加自动化;以及让应用程序可识别数据库。 MFC 应用程序向导为主干应用程序创建文件,包括应用程序的源文件、文档、视图和框架窗口;一个资源文件;一个项目文件;以及其他内容(全部根据您的规范定制)。

2.了解即使在不添加你自己的任何一行代码的情况下,框架和 MFC 应用程序向导也能提供的内容。

生成主干应用程序并在 Visual C++ 中运行它。 正在运行的主干应用程序从框架派生了许多标准“文件”、“编辑”、“视图”和“帮助”菜单命令。 对于 MDI 应用程序,您还将获得一个完整的功能性 Windows 菜单,而框架将管理 MDI 子窗口的创建、排列和析构。

3.构造应用程序的用户界面。

使用 Visual C++ 资源编辑器直观地编辑应用程序的用户界面:

  • 创建菜单。
  • 定义快捷键。
  • 创建对话框。
  • 创建并编辑位图、图标和光标。
  • 编辑 MFC 应用程序向导为你创建的工具栏。
  • 创建并编辑其他资源。

你还可以在对话框编辑器中测试对话框。 MFC 应用程序向导创建的默认资源文件提供了很多您需要的资源。 利用 Visual C++,您可以轻松直观地编辑现有资源和添加新资源。

4.将菜单映射到处理程序函数。

使用“类视图”中“属性”窗口中的“事件”按钮(或类向导中的“命令”选项卡)将菜单和快捷键连接到代码中的处理程序函数。 这些工具将消息映射项和空函数模板插入你指定的源文件并管理许多手动编码任务。

5. 编写处理程序代码。

使用类视图直接跳转到在源代码编辑器中的代码。 为处理程序函数填写代码。 有关使用类视图的详细信息以及向项目添加代码的向导的详细信息,请参阅使用代码向导添加功能。 类视图打开编辑器,滚动到空函数模板并为您放置光标。

6.将工具栏按钮映射到命令。

通过为工具栏上的每个按钮分配相应的命令 ID 来将其映射到菜单或快捷键命令。 框架控制工具栏按钮的绘制、启用、禁用、检查和其他可视方面。

7.测试处理程序函数。

重新生成程序并使用内置调试工具来测试处理程序是否正常工作。 您可以逐步执行代码或跟踪代码以了解处理程序的调用情况。 如果已填写处理程序代码,处理程序将执行命令。 框架将自动禁用未处理的菜单项和工具栏按钮。

8.添加对话框。

使用对话框编辑器设计对话框模板资源。 然后创建对话框类和处理对话框的代码。 框架管理对话框并帮助检索用户输入的信息。

9. 初始化、验证和检索对话框数据。

您还可以定义初始化和验证对话框的控件的方式。 使用 Visual Studio 将成员变量添加到对话框类,并将这些变量映射到对话框控件。 指定要在用户输入数据时应用于每个控件的验证规则。 根据需要提供您自己的自定义验证。 框架管理对话框初始化和验证。 如果用户输入无效的信息,框架将显示消息框并让用户重新输入数据。

10.创建其他类。

除 MFC 应用程序向导自动创建的参数之外,使用类视图创建附加文档、视图和框架窗口类。 您可以创建其他数据库记录集类、对话框类等。 (利用类视图,您可以创建并非派生自 MFC 类的类。) 类视图这些类添加到您的源文件并帮助您定义它们与所处理的任何命令的关联。

11.将可以立即使用的组件添加到应用程序。

使用 New Item dialog box 添加各种项。 这些项可轻松集成到应用程序中,从而显著减少了您的工作量。

12.实现文档类。

实现特定于应用程序的文档类。 添加成员变量以保留数据结构。 添加成员函数以提供数据的接口。 框架已经知道如何与文档数据文件交互。 它可以打开和关闭文档文件、读取和写入文档的数据以及处理其他用户界面。 您可以重点关注如何操作文档的数据。

13.实现“打开”、“保存”和“另存为”命令。

为文档的 Serialize 成员函数编写代码。 框架显示“文件”菜单上的“打开”“保存”和“另存为”命令的对话框。 该对话框使用 Serialize 成员函数中指定的数据格式写回和读回文档。

14.实现视图类。

实现与文档对应的一个或多个视图类。 使用类视图实现您映射到用户界面的视图的成员函数。 有各种 CView 派生类可用,包括 CListViewCTreeView。 框架管理文档及其视图之间的大多数关系。 该视图的成员函数访问视图的文档,以便在屏幕或打印页上呈现其图像和更新文档的数据结构以响应用户编辑命令。

15. 增强默认打印。

如果需要支持多页打印,请重写视图成员函数。 框架支持“文件”菜单上的“打印”“页面设置”和“打印预览”命令。 您必须告诉它如何将文档分为多个页。

16.添加滚动。

如果需要支持滚动,请从 CScrollView 派生你的视图类。 当视图窗口变得过小时,视图将自动添加滚动条。

17. 创建窗体视图。

如果要让你的视图基于对话框模板资源,请从 CFormView 派生你的视图类。 该视图使用对话框模板资源来显示控件。 用户可以使用 Tab 键切换视图中的控件。

18.创建数据库窗体。

如果需要基于窗体的数据访问应用程序,请从 CRecordView 派生你的视图类(对于 ODBC 编程)。 该视图像窗体视图一样工作,但其控件连接到表示数据库表的 CRecordset 对象的字段。 MFC 将为您在控件和记录集之间移动数据。

19.创建简单文本编辑器。

如果要让你的视图成为简单的文本编辑器,请从 CEditView 或 CRichEditView 派生你的视图类。 该视图提供了编辑函数、剪贴板支持和文件输入/输出。 CRichEditView 提供了带样式的文本。

10.增加拆分窗口

如果要支持窗口拆分,请将 CSplitterWnd 对象添加到 SDI 框架窗口或 MDI 子窗口,并将其挂钩到窗口的 OnCreateClient 成员函数中。 框架在滚动条旁边提供拆分框控件并管理将您的视图拆分为多个窗格。 如果用户拆分了一个窗口,框架将创建视图对象并将其附加到文档。

生成、测试和调试应用程序。

使用 Visual C++ 的工具生成、测试和调试应用程序。 Visual C++ 可让您调整编译、链接和其他选项。 它还可让你浏览源代码和类结构。

1.创建 COM 组件。

运行 MFC 应用程序向导。 在“复合文档支持”选项卡中选择“全服务器”或“微型服务器”。 框架生成启用了 COM 组件功能的框架应用程序。 所有 COM 功能都可以传输到现有应用程序,只需稍作修改。

2.从头开始创建容器应用程序。

运行 MFC 应用程序向导。 在“复合文档支持”选项卡中选择“容器”。使用类视图,转到源代码编辑器。 为 COM 处理程序函数填写代码。 框架生成一个框架应用程序,该应用程序可以插入 COM 组件(服务器)应用程序创建的 COM 对象。

3.从头开始创建支持自动化的应用程序。

运行 MFC 应用程序向导。 从“高级功能”选项卡中选择“自动化”。使用类视图在应用程序中公开用于自动化的方法和属性。 框架生成可由其他应用程序激活和自动化的框架应用程序。

相关文章:

windows应用(vc++2022)MFC基础到实战(2)

目录向导和资源编辑器使用 MFC 应用程序向导创建 MFC 应用程序使用类视图管理类和 Windows 消息使用资源编辑器创建和编辑资源生成 MFC 应用程序的操作1.创建一个主干应用程序。2.了解即使在不添加你自己的任何一行代码的情况下,框架和 MFC 应用程序向导也能提供的内…...

记一次反射型XSS

记一次反射型XSS1.反射型XSS1.1.前言1.2.测试过程1.3.实战演示1.3.1.输入框1.3.2.插入代码1.3.3.跳转链接2.总结1.反射型XSS 1.1.前言 关于这个反射型XSS,利用的方式除了钓鱼,可能更多的就是自娱自乐,那都说是自娱自乐了,并且对系…...

BUUCTF-[羊城杯 2020]Bytecode

题目下载:下载 这道题是一个关于python字节码的。 补充一下相关知识:https://shliang.blog.csdn.net/article/details/119676978dis --- Python 字节码反汇编器 — Python 3.7.13 文档 手工还原参考:[原创]死磕python字节码-手工还原python源码-软件逆…...

《Uniapp入门指南:从安装到打包的全流程》

Uniapp是一款基于Vue.js的跨平台开发框架,可以快速构建出同时支持多个移动端平台和Web端的应用程序。本文将介绍Uniapp的基础知识和开发流程,帮助读者快速入门Uniapp开发。一、Uniapp的基础知识1.Uniapp的优势Uniapp的最大优势是可以快速开发同时支持多个…...

机器学习算法集成系统

版权所有:CSDN——川川菜鸟 本系统并不作为本专栏要求,这一篇自愿学习。 文章目录 本系统设计背景设计思路完整代码本系统设计背景 随着人工智能技术的不断发展,机器学习成为了人工智能领域的重要组成部分。机器学习算法能够从大量数据中发现模式、规律,并利用这些规律对新…...

scratch绘制雷达 电子学会图形化编程scratch等级考试三级真题和答案解析2022年9月

目录 scratch绘制雷达 一、题目要求 1、准备工作 2、功能实现 二、案例分析...

VRRP主备备份

1、VRRP专业术语 VRRP备份组框架图如图14-1所示: 图14-1:VRRP备份组框架图 VRRP路由器(VRRP Router):运行VRRP协议的设备,它可能属于一个或多个虚拟路由器,如SwitchA和SwitchB。虚拟路由器(Virtual Router):又称VRR…...

【软件逆向】软件破解?病毒木马?游戏外挂?

文章目录课前闲聊认识CTF什么是CTFCTF解题模式什么是逆向定义应用领域CTF中的逆向现状推荐书籍学习要点逆向工程学习基础常规逆向流程阶段一:信息收集阶段二:过保护后静态调试阶段三:结合动态调试阶段四:写解题脚本逆向例题概览1-控制台程序解题过程2-Crackme3-游戏4-移动安全C…...

curl请求常用参数和返回码

curl是一个用于传输数据的工具,支持各种协议,如HTTP、FTP、SMTP等。以下是一些常用的curl请求参数及其作用: -X, --request:指定HTTP请求方法,常见的有GET、POST、PUT、DELETE等。 -H, --header:设置HTTP请…...

【STM32】进阶(一):抢占式优先级和响应式优先级(NVIC_PriorityGroupConfig)

1、简介 STM32(Cortex-M3)中每个中断源都有两级优先级:抢占式优先级(pre-emption priority)和子优先级(subpriority),子优先级也叫响应式优先级。 1.1 抢占式优先级 望文知义,就是优先级高的…...

LogCompilation后JIT输出文件格式解析

https://wiki.openjdk.org/display/HotSpot/LogCompilationoverview https://spotcodereviews.com/articles/optimization/2020/12/23/why-does-the-jit-continually-recompile-the-same-method.html task_queued count表示总共执行次数,iicount表示解释器执行次数…...

Linux学习第二十四节-Podman容器

一、容器的概念 容器是由一个或多个与系统其余部分隔离的进程组成的集合。我们可以理解为“集装箱”。 集装箱是打包和装运货物的标准方式。它作为一个箱子进行标记、装载、卸载,以及从一个 位置运输到另一个位置。该容器的内容与其他容器的内容隔离&#xff0c…...

基于quartz实现定时任务管理系统

基于quartz实现定时任务管理系统 背景 说起定时任务框架,首先想到的是Quartz。这是定时任务的老牌框架了,它的优缺点都很明显。借助PowerJob 的readme文档的内容简单带过一下这部分。 除了上面提到,还有elastic-job-lite、quartzui也是相当…...

vue-element-admin:基于element-ui 的一套后台管理系统集成方案

文章目录一、vue-element-admin1、vue-element-admin1.1简介1.2安装2、vue-admin-template2.1简介2.2安装一、vue-element-admin 1、vue-element-admin 1.1简介 vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 GitHub地址:https://github.com…...

KVM-7、KVM 虚拟机创建的几种方式

通过对 qemu-kvm、libvirt 的学习,总结三种创建虚拟机的方式: (1)通过 qemu-kvm 创建 (2)通过 virt-install 创建 (3)通过 virt-manager 创建 在使用这三种创建虚拟机前提是 宿主机必须支持 cpu 的硬件虚拟化技术(Intel 是 vmx,AMD 是svm),通过下面方式进行查看…...

Hadoop三大框架之HDFS

一、概述HDFS产生的背景及定义HDFS产生背景随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,需要一种系统来管理多台机器上的文件,这就是分布式文件…...

好好的系统,为什么要分库分表?

不急于上手实战 ShardingSphere 框架,先来复习下分库分表的基础概念,技术名词大多晦涩难懂,不要死记硬背理解最重要,当你捅破那层窗户纸,发现其实它也就那么回事。 什么是分库分表 分库分表是在海量数据下&#xff0…...

多种调度模式下的光储电站经济性最优储能容量配置分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

二分法(适用于任何题型!!!)

今天看二分法看了一天,看吐了,现在讲讲怎么做类题。 只讲两种做法(实则是可合并为一种),任何题型都可以转化为这种做法!!!是任何! 首先,设置 int left,righ…...

js常见的七种继承及实现

在 JavaScript 中,常见的继承方式有以下七种:大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库1. 原型链继承原型链继承是 JavaScript 中一种基于原型的继承方式&#…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

云原生安全实战:API网关Envoy的鉴权与限流详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

第22节 Node.js JXcore 打包

Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本,基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...

从0开始一篇文章学习Nginx

Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...