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

案例分析之——理由Mybatis动态SQL实现复用

无复用思想的做法: 在没有复用思想的时候,就只顾着实现功能。比如开发过程中涉及到两个表的更新功能,每需要更新一处,就写一个接口,结果出现了写了11个接口的情况。 这样虽然功能实现了,可是可能自…...

MCM 箱模型建模方法及大气 O3 来源解析实用干货

OBM 箱模型可用于模拟光化学污染的发生、演变过程,研究臭氧的生成机制和进行敏感性分析,探讨前体物的排放对光化学污染的影响。箱模型通常由化学机理、物理过程、初始条件、输入和输出模块构成,化学机理是其核心部分。MCM (Master Chemical M…...

【独家】华为OD机试 - 最长连续交替方波信号(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

代码随想录算法训练营第二十一天打卡 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

打卡第21天,继续二叉树,前几天终于补完了,感觉难度上来了。 今日任务 530.二叉搜索树的最小绝对差501.二叉搜索树中的众数 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不…...

免费下载丨一看即会,Serverless 技术进阶必读百宝书

过去一年,全球正在加速推进云计算的 Serverless 化进程。Serverless 架构已经逐渐从“被接受”走向了“被学习”和“被应用”。云的产品体系正在 Serverless 化,从计算、存储、数据库到中间件,越来越多的云产品采用了 Serverless 模式。服务器…...

SQL语句的加锁方式 - Mysql 锁机制

SQL语句的加锁方式 - Mysql锁机制 SELECT ... FROM SELECT ... FOR UPDATE / SELECT ... FOR SHARED MODE SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE UPDATE ... WHERE ... DELETE FROM ... WHERE ... INSERT INSERT ... ON DUPLICATE KEY UPDATE REPLACE Mysql锁机…...

C#开发的OpenRA的游戏主界面怎么样创建4

继续游戏主界面创建的主题, 前面已经说到怎么样找到mainmenu.yaml来显示主界面,也说了怎么样找到各个子控件类。 现在就来仔细分析一下,主界面每一部分的功能。 比如下面这个区域的界面是怎么样创建: 要创建这一小部分的界面显示,也是需要做很多的工作。 因为在这里所有UI…...

覆盖5大主流开发平台的报表控件,它值得你一看

为什么大家现在都在使用第三方报表工具呢? 第三方报表工具是数据库存储,数据库程序通常可以存放的数据量是相当大的,可以处理非常复杂的数据结构关系,报表数据交互速度也非常快。不仅能够提高开发效率,还能实现灵活美…...

【冲刺蓝桥杯的最后30天】day4

大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨‍💻,断更了整整一年,又开始恢复CSDN更新,从今天开始更新备战蓝桥30天系列,一共30天,如果对你有帮助或者正在备…...

spring boot actuator 动态修改日志级别

1 日志级别 Spring Boot Actuator包括在运行时查看和配置应用程序日志级别的功能。您可以查看整个列表,也可以查看单个记录器的配置,该配置由显式配置的日志级别和日志框架给出的有效日志级别组成。这些级别可以是: TRACEDEBUGINFOWARNERRORFATALOFFnu…...

上海老闵行网站建设/新塘网站seo优化

大家认为,自己这辈子做过的最正确的事情是什么?每个人都有自己心中的答案。如果让小灰来回答,小灰会毫不犹豫的说:“我这辈子做过最正确的事情,就是选择做公众号,或者更笼统的说,是对于个人副业…...

网站建设专题页/b2b采购平台

问题: swiper数量达到大约400时候会出现明显滑动卡顿,渲染慢的问题,达到1000时候需要几十秒时间,或者可能导致渲染失败。 解决方案: 配置circular"true"属性开启衔接滑动,即播放到末尾后重新回到…...

网站代码在哪里写/杭州网站制作排名

问题描述: 原因: 在apptool 2.0以后命令发生了变化,不能再使用 apktool d <apk_path> <outfile_path> 解决方法:解决方法: 使用命令行apktool d -f <apk_path> -o <outfile_path> 终极解决方法: 输入 apktool 指令,能看到你所安装版本支持的全部指令 转…...

精选南昌网站建设公司/数据分析师培训机构推荐

主要是使用了angular的指令。 学习地址:http://www.runoob.com/angularjs/angularjs-tutorial.html 1. 效果&#xff1a; 输入数据剩余字数会相应减少&#xff0c;点击保存弹出已保存提示信息&#xff0c;点击清空输入数据为空。 <!DOCTYPE html> <html lang"en&…...

网址导航网站有哪些/网站搭建一般要多少钱

1&#xff09;主服务器--master --port 20001 2&#xff09;从服务器--slave --source 127.0.0.1:20001 --port 20002 注释&#xff1a;--master 以主服务器形式启动mongod--slave 以从服务器形式启动mongod--source 源&#xff08;主服务器&#xff09;的位置--port 服务商品 …...

做网站前需要准备什么条件/今天国际新闻最新消息10条

文章目录前言正文遇到问题排查过程/etc/nginx/conf.d/xxx.conf配置原因&解决参考链接总结前言 在配置nginx反向代理后端服务时&#xff0c;遇到前端不能访问后端的情况&#xff0c;查看日志发现有一句错误信息&#xff1a;The character [_] is never valid in a domain na…...