当前位置: 首页 > 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 中一种基于原型的继承方式&#…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...