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

【MFC】01.MFC框架-笔记

基本概念

MFC Microsoft Fundation class 微软基础类库

框架 基于Win32 SDK进行的封装


属性:缓解库关闭

属性->C/C++/代码生成/运行库/MTD

属性->常规->MFC的使用:在静态库中使用MFC,默认是使用的共享DLL,运行时库

SDK版本:开发软件的套件

WSK:开发驱动的套件


MFC基于类的管理

预编译头:

Demo01.h

Demo01.cpp

Demo01Dlg.cpp

  • Demo01Dlg.h

    绑定在对话框上的类

    类的继承关系:

    Cobject:处理序列化以及反序列化

    CCmdTarget:处理WM_COMMAND消息

    CWnd:窗口类

    CDialog:对话框

    CDialogEx:对话框

    Demo01Dlg:自己创建的对话框

  • OnInitDialog:对话框MFC框架的入口

  • MFC里和窗口句柄有关的函数,均不需要填写窗口句柄函数

  • 如果需要,添加作用域强行退出MFC的命名空间

  • 模态对话框

  • 非模态对话框

MFC中依然支持SDK的做法


类绑定:

  1. 添加类
  2. 类名

MFC绑定变量:

值类型

控件类型

复习总结:

  • 创建MFC项目的时候,项目名称中不能出现中文。

  • 如果想要兼容让其他没有安装visual studio的计算机使用,那么就要使用在静态链接库中使用MFC

  • MFC是基于类的

  • Practice.h:

    该文件为我们创建了CPracticeApp类

    类的继承关系:

    (上面还有很多)

    CWinThread:应用程序线程,继承CCmdTarget

    CWWinApp:对话框,继承CWinThread

    CPraticeApp:是我们自己的应用程序类,继承CWinApp

  • PracticeDlg.h:

    这个头文件中是我们自己创建的对话框类

    类继承关系:

    CObject:基础类库中的主体基类,处理序列化与反序列化

    CCmdTarget:消息映射结构体系类,继承Cobject

    CWnd:窗口类,继承CCmdTarget

    CDialog:对话框类,继承CWnd

    CDialogEx:对话框类,继承CDialog

    CPraticeDlg:我们自己的对话框类,继承CDialogEx

相关操作:

  • 按钮操作:在对话框上双击按钮即可编辑相关操作

  • 添加对话框:比如说要在某个按钮上添加对话框,首先需要画出对话框,然后双击添加MFC类,在要显示的时候,先用这个类声明一个变量,然后使用DoModal方法,也可以先new出该对话框的类,然后使用Create方法,创建出对话框,但是这种方法需要ShowWindow方法,

    实例:

    第一种:

        CDialogOne obj;obj.DoModal();
    

    第二种:

      CDialogTwo *obj = NULL;obj = new CDialogTwo;obj->Create(IDD_DIALOG2, this);obj->ShowWindow(SW_SHOW);
    
  • 可以在按钮上添加变量,比如说在一个按钮上添加了一个文本框变量,将其添加为值的形式,字符串类型,那么我们在处理按钮的时候,可以直接:

    其中UpDateData方法的作用是同步

        UpdateData(TRUE);m_EDIT = L"欢迎来到MFC的世界!";UpdateData(FALSE);
    
  • 在MFC中,有很多消息是自己处理了,我们并不用关心,但是如果我们要自己处理消息

    • 处理SendMessage消息:

      在对话框中使用类向导,添加OnWndMsg方法,在OnOwnMsg方法中,我们可以像SDK那样处理消息。

      BOOL CPracitceDlg::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
      {// TODO: 在此添加专用代码和/或调用基类switch (message) {case WM_KEYDOWN: {switch (wParam) {case VK_F4: {MessageBox(L"F!", L"MSG", NULL);break;}}break;}case WM_LBUTTONDOWN: {MessageBox(L"WM_LBUTTONDOWN", L"MSG", NULL);break;}case 199: {MessageBox(L"SEND199", L"MSG", NULL);break;}case 200: {break;MessageBox(L"SEND200", L"MSG", NULL);}case 201: {MessageBox(L"SEND201", L"MSG", NULL);break;}case 202: {MessageBox(L"SEND202", L"MSG", NULL);break;}}return CDialogEx::OnWndMsg(message, wParam, lParam, pResult);
      }
      
    • 处理PostMessage消息:

      在对话框中使用类向导,添加PreTranslateMessage方法,在PreTranslateMessage方法中,我们可以像SDK那样处理消息。

      BOOL CPracitceDlg::PreTranslateMessage(MSG* pMsg)
      {// TODO: 在此添加专用代码和/或调用基类switch (pMsg->wParam) {case 199: {MessageBox(L"POST199", L"MSG", NULL);break;}case 200: {break;MessageBox(L"POST200", L"MSG", NULL);}case 201: {MessageBox(L"POST201", L"MSG", NULL);break;}case 202: {MessageBox(L"POST202", L"MSG", NULL);break;}}return CDialogEx::PreTranslateMessage(pMsg);
      }
      
  • SendMessage会等待消息响应,会阻塞,所以会按照顺序来,但是PostMessage不会等待消息返回,所以导致顺序倒置:

    void CPracitceDlg::OnBnClickedButton1()
    {//CDialogOne obj;//obj.DoModal();///*//HWND hEdit1Dlg = ::GetDlgItem(m_hWnd, IDC_EDIT1);//::SetWindowText(hEdit1Dlg, L"欢迎来到MFC的世界!");*///UpdateData(TRUE);//m_EDIT = L"欢迎来到MFC的世界!";//UpdateData(FALSE);//SendMessage(199, NULL, NULL);//SendMessage(200, NULL, NULL);//SendMessage(201, NULL, NULL);//SendMessage(202, NULL, NULL);PostMessage(199, NULL, NULL);PostMessage(200, NULL, NULL);PostMessage(201, NULL, NULL);PostMessage(202, NULL, NULL);
    }
    

相关文章:

【MFC】01.MFC框架-笔记

基本概念 MFC Microsoft Fundation class 微软基础类库 框架 基于Win32 SDK进行的封装 属性:缓解库关闭 属性->C/C/代码生成/运行库/MTD 属性->常规->MFC的使用:在静态库中使用MFC,默认是使用的共享DLL,运行时库 SD…...

基于ArcGIS污染物浓度及风险的时空分布

在GIS发展的早期,专业人士主要关注于数据编辑或者集中于应用工程,以及主要把精力花费在创建GIS数据库并构造地理信息和知识。慢慢的,GIS的专业人士开始在大量的GIS应用中使用这些知识信息库。用户应用功能全面的GIS工作站来编辑地理数据集&am…...

【项目开发计划制定工作经验之谈】

一、背景介绍 随着信息技术的发展,项目管理越来越受到企业和组织的重视。项目管理是一项旨在规划、组织、管理和控制项目的活动,以达到特定目标的过程。项目开发计划是项目管理的一个重要组成部分,它是指定项目目标、工作范围、进度、质量、…...

基于STM32的格力空调红外控制

基于STM32的格力空调红外控制 1.红外线简介 在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光。目前几乎所有的视频和音频设备都可以通过红外遥控的方式进行遥控,比如电视机、空调、影碟机等,都可以见到红外遥控的影子。这种技…...

rust中thiserror怎么使用呢?

thiserror 是一个Rust库,可以帮助你更方便地定义自己的错误类型。它提供了一个类似于 macro_rules 的宏,可以帮助你快速地定义错误类型,并为错误添加上下文信息。下面是一个使用 thiserror 的示例: 首先,在你的Rust项…...

ceph tier和bcache区别

作者:吴业亮 博客:wuyeliang.blog.csdn.net Ceph tier(SSD POOL HDD POOL)不推荐的原因: 数据在两个资源池之间迁移代价太大,存在粒度问题(对象级别),且需要进行write…...

Idea 2023.2 maven 打包时提示 waring 问题解决

Version idea 2023.2 问题 使用 Maven 打包 ,控制台输出 Waring 信息 [WARNING] [WARNING] Plugin validation issues were detected in 7 plugin(s) [WARNING] [WARNING] * org.apache.maven.plugins:maven-dependency-plugin:3.3.0 [WARNING] * org.apache.…...

docker数据持久化

在Docker中若要想实现容器数据的持久化(所谓的数据持久化即数据不随着Container的结束而销毁),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中。 (1)Volumes:…...

安全防护,保障企业图文档安全的有效方法

随着企业现在数据量的不断增加和数据泄露事件的频发,图文档的安全性成为了企业必须高度关注的问题。传统的纸质文件存储方式已不适应现代企业的需求,而在线图文档管理成为了更加安全可靠的数字化解决方案。那么在在线图文档管理中,如何采取有…...

Open3D (C++) 基于拟合平面的点云地面点提取

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、原始点云2、提取结果四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重,把自己当个人,爬些不完整的误导别人有意思吗???? 一、算法原理...

【Linux】Kali Linux 渗透安全学习笔记(2) - OneForAll 简单应用

OneForAll (以下简称“OFA”)是一个非常好用的子域收集工具,可以通过一级域名找到旗下的所有层级域名,通过递归的方式我们很容易就能够知道此域名下的所有域名层级结构,对于进一步通过域名推测站点功能起到非常重要的作…...

DAY56:单调栈(二)下一个最大元素Ⅱ(环形数组处理思路)

文章目录 思路写法1完整版环形数组处理:i取模,遍历两遍写法2完整版(环形数组推荐写法)debug测试:逻辑运算符短路特性result数组在栈口取元素,是否会覆盖原有数值? 给定一个循环数组 nums &#…...

kafka简介

kafka是什么? Kafka最初采用Scala语言开发的一个多分区、多副本并且基于ZooKeeper协调的分布式消息系统。目前Kafka已经定位为一个分布式流式处理平台,它的特性有高吞吐、可持久化、可水平扩展、支持流处理。 Apache Kafka是一个分布式的发布-订阅消息系…...

Kafka-消费者组消费流程

消费者向kafka集群发送消费请求,消费者客户端默认每次从kafka集群拉取50M数据,放到缓冲队列中,消费者从缓冲队列中每次拉取500条数据进行消费。...

FFmepg视频解码

1 前言 上一篇文章<FFmpeg下载安装及Windows开发环境设置>介绍了FFmpeg的下载安装及环境配置&#xff0c;本文介绍最简单的FFmpeg视频解码示例。 2 视频解码过程 本文只讨论视频解码。 FFmpeg视频解码的过程比较简单&#xff0c;实际就4步&#xff1a; 打开媒体流获取…...

SpringCloud深入理解 | 生产者、消费者

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; SpringCloud Spring Cloud是一组用于构建分布式系统和微服务架构的开源框架和工具集合。它是在Spring生态系统的基础上构建的&#xff0c;旨在简化开发人员构建分布式…...

web题型

0X01 命令执行 漏洞原理 没有对用户输入的内容进行一定过滤直接传给shell_exec、system一类函数执行 看一个具体例子 cmd1|cmd2:无论cmd1是否执行成功&#xff0c;cmd2将被执行 cmd1;cmd2:无论cmd1是否执行成功&#xff0c;cmd2将被执行 cmd1&cmd2:无论cmd1是否执行成…...

使用curl和postman调用Azure OpenAI Restful API

使用curl在cmd中调用时&#xff0c;注意&#xff1a;json大括号内的每一个双引号前需要加上\ curl https://xxxopenai.openai.azure.com/openai/deployments/Your_deployid/chat/completions?api-version2023-05-15 -H "Content-Type: application/json" -H "…...

草莓叶病害数据集

1.草莓数据集有两个文件夹 训练集 健康文件夹&#xff08;2819张&#xff09; 草莓叶焦病害&#xff08;3327张&#xff09; 数据集可以关注最后一行 import numpy as np import os import matplotlib.pyplot as plt import cv2import warnings warnings.filterwarnings(igno…...

安卓音视频多对多级联转发渲染

最近利用自己以前学习和用到的音视频知识和工程技能做了一个android的sdk,实现了本地流媒体ipc rtsp 拉流以及自带mip usb等camera audio节点产生的流媒体通过webrtc sfu的方式进行多对多级联发布共享,网状结构&#xff0c;p2p组网&#xff0c;支持实时渲染以及转推rtmp&#x…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...