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

【MFC】09.MFC视图-笔记

MFC视图窗口:CView类 显示数据/画面

我们之前的绘图消息,都是在框架类上画出来的

视图窗口就覆盖在框架窗口上

视图窗口本质上也是窗口,只是和框架窗口风格不同

CView类也继承于CWnd类

CView也能处理消息,因为它继承于CWnd类

试图窗口没有边框等

视图窗口是框架窗口的子类 WS_CHILD

在框架窗口创建的时候,创建视图窗口

class CMyView:public CView{virtual void OnDraw(CDC* pDC){}
}MyView m_View;
//我们发现不能定义对象:
C++:抽象类不能定义对象,就说明:CView是一个纯虚类(抽象类)
我们返回去重写纯虚函数重写了OnDraw函数之后,我们就可以定义对象了

然后我们在我们自己的框架类的Create中:

int CMyFrameWnd::OnCreate(LPCREATESTRUCT)
{RECT rect;GetWindowRect(&rect);m_View.Create(NULL, L"MFCView", WS_CHILD | WS_VISIBLE | WS_BORDER, rect, this, 1);return 0;
}

这样创建出来视图窗口之后,关闭窗口,会报错

原因:在父类中释放了对象,也就是说,我们的视图类是继承于CWnd类,在释放CWnd类的时候,析构了一次,而在框架类上又要释放一次,导致报错

解决方法:

在框架类Create中:

m_view = new MyView;
通过指针调用
这样只有当delete的时候,才会释放

上面创建视图窗口的时候,需要我们提供ID,这样在窗口分割的时候可以用到,如果无法获取ID,MFC提供了一个宏,可以自动帮我们识别窗口大小:

AFX_IDW_PANE_FIRST

内部调用了MoveWindow

  • OnDrow函数:

    调用这个函数画出文档的图像,用于屏幕显示,打印或打印预览。需要提供其实现

    在Wind32编程中 只有WM_PAINT消息

    class CMyView :public CView {virtual void OnDraw(CDC* pDc) {pDc->TextOutW(50, 50, L"CMyView");}
    };
    

    在我们的视图类中,也可以处理WM_PAINT消息用于绘图

    如果我们处理了WM_PAINT消息,就不会调用OnDraw函数

    如果我们没有处理WM_PAINT消息,就会调用OnDraw函数

    视图类继承与框架类,也有一条消息链表

    如果我们没有重写处理WM_PAINT消息的话,就不会有消息链表

    遍历消息的时候,就去父类的消息链表上去寻找

    如果我们重写了处理WM_PAINT消息的话,就会到自己的消息链表上去抓消息,处理完了之后就退出,不会到父类消息链表中去抓消息

那既然视图类有消息链表,那视图类肯定也能够处理消息,我们在视图类中处理菜单消息

我们实现了代码之后,发现菜单变成了灰色,但是我们点击视图窗口的时候,发现又可以点击了

这是因为视图分割,只有当活动试图在我们处理消息的试图上的时候,就可以处理消息

点击就是给框架类窗口一个成员赋值(活动视图是我们处理消息的视图)

this->m_pViewActive = m_view

  • 试图分割
  • 机制:动态创建
  • RTTI:运行时类信息 代码在运行当中,也能拿到类的信息来判断是否属于哪个类

相关文章:

【MFC】09.MFC视图-笔记

MFC视图窗口:CView类 显示数据/画面 我们之前的绘图消息,都是在框架类上画出来的 视图窗口就覆盖在框架窗口上 视图窗口本质上也是窗口,只是和框架窗口风格不同 CView类也继承于CWnd类 CView也能处理消息,因为它继承于CWnd类…...

【字节跳动青训营】后端笔记整理-2 | Go实践记录:猜谜游戏,在线词典,Socks5代理服务器

**本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金:🔗Go实践记录:猜谜游戏,在线词典,Socks5代理服务器 | 青训营 我的go开发环境…...

GPT的第一个创作

嗨,大家好,我是赖兴泳!今天,我要和大家聊一聊前端开发,就像我用音符创造音乐一样,前端开发也是创造美丽的用户界面的过程。 前端开发是构建网站和应用程序用户界面的关键部分。就像音乐家需要精心编排音符…...

Spring Boot 获取前端参数

Spring Boot 获取前端参数 在开发 Web 应用程序时,前端参数是非常重要的。Spring Boot 提供了多种方法来获取前端参数,本文将介绍其中的一些常用方法。 1. 使用 RequestParam 注解 RequestParam 注解是 Spring MVC 提供的一种常用方式,用于…...

java应用运行在docker,并且其他组件也在docker

docker启动redis容器 # create redis docker run -d --name redis-container -p 6379:6379 redis:latest创建java 应用 dockerfile FROM openjdk:17##Pre-create related directories RUN mkdir -p /data/etax/ms-app WORKDIR /data/etax/ms-appEXPOSE 10133 COPY ./target…...

Java真实面试题,offer已到手

关于学习 在黑马程序员刚刚开始的时候学习尽头非常足,到后面逐渐失去了一些兴趣,以至于后面上课会出现走神等问题,但是毕业时后悔晚矣。等到开始学习项目一的时候,思路总会比别人慢一些,不看讲义写不出来代码。 建议…...

在序列化、反序列化下如何保持单例(Singleton)模式

1、序列化、反序列化 在 Java 中,当一个对象被序列化后再被反序列化,通常情况下会创建一个新的对象实例。这是因为序列化将对象的状态保存到字节流中,而反序列化则是将字节流重新转化为对象。在这个过程中,通常会使用类的构造函数…...

【数据结构】二叉树篇|超清晰图解和详解:二叉树的最近公共祖先

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 目录 一、题目二、题解三、代码 一、题目 …...

android ndk clang交叉编译ffmpeg动态库踩坑

1.ffmpeg默认使用gcc编译,在android上无法使用,否则各种报错,所以要用ndk的clang编译 2.下载ffmpeg源码 修改configure文件,增加命令 cross_prefix_clang 修改以下命令 cc_default"${cross_prefix}${cc_default}" cxx…...

简单记录牛客top101算法题(初级题C语言实现)BM24 二叉树的中序遍历 BM28 二叉树的最大深度 BM29 二叉树中和为某一值的路径

1. BM24 二叉树的中序/后续遍历 要求:给定一个二叉树的根节点root,返回它的中序遍历结果。                          输入:{1,2,#,#,3} 返回值:[2,3,1]1.1 自己的整体思路(与二叉树的前序遍…...

前后端分离------后端创建笔记(05)用户列表查询接口(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...

性能测试|App性能测试需要关注的指标

一、Android客户端性能测试常见指标: 1、内存 2、CPU 3、流量 4、电量 5、启动速度 6、滑动速度、界面切换速度 7、与服务器交互的网络速度 二、预期标准指定原则 1、分析竞争对手的产品,所有指标要强于竞品 2、产品经理给出的预期性能指标数据…...

Termux SFTP 进行远程文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…...

Sqlite3简介

SQLite3 简介 SQLite3 是一种轻量级的嵌入式数据库引擎,被广泛应用于各种应用程序中,包括移动设备、桌面应用程序和嵌入式系统。它以其简单、高效和零配置的特点而受到开发者的喜爱。 以下是 SQLite3 的一些重要特点: 嵌入式数据库引擎&…...

K8S调度

K8S调度 一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略 预选策略/预算策略:通过调度算法过滤掉不满足条件…...

vue+element多层表单校验prop和rules

核心点:外层循环是item和index,内层循环是item2和index2 如果都是定义的同一个属性名 外层循环得写:prop"block.index.numerical" 同理内层循环就得写:prop"objectSpecs. index2 .numerical" 校验函数方法 :rules"getRules(it…...

Dubbo 核心概念和架构

以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管…...

【数据结构OJ题】反转链表

原题链接:https://leetcode.cn/problems/reverse-linked-list/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 方法一:三指针翻转法 使用三个结构体指针n1,n2,n3,原地修改结点…...

Java8 Stream 之groupingBy 分组讲解

本文主要讲解&#xff1a;Java 8 Stream之Collectors.groupingBy()分组示例 Collectors.groupingBy() 分组之常见用法 功能代码: /** * 使用java8 stream groupingBy操作,按城市分组list */ public void groupingByCity() { Map<String, List<Em…...

优哲SSD大文件写性能测试

SDD磁盘性能测试&#xff1a; 空盘&#xff1a; 大文件读&#xff0c;写&#xff0c;读写&#xff08;4/6&#xff09;性能测试&#xff0c;删除性能测试&#xff0c;N进程&#xff0c;N线程 小文件读&#xff0c;写&#xff0c;读写&#xff08;4/6&#xff09;性能测试&am…...

别再复制粘贴了!手把手带你用DEFINE_PROFILE宏实现一个正弦变化入口速度

从零实现Fluent正弦速度入口&#xff1a;DEFINE_PROFILE宏实战指南 在计算流体力学(CFD)仿真中&#xff0c;标准边界条件设置往往无法满足复杂工况需求。想象这样一个场景&#xff1a;你需要模拟风力发电机叶片在阵风条件下的受力情况&#xff0c;入口风速并非恒定值&#xff0…...

安卓截屏限制FLAG_SECURE原理与MT管理器绕过实战

1. 截屏限制不是“锁”&#xff0c;而是“提示灯”——先破除一个普遍误解 很多人一看到“App禁止截屏”&#xff0c;第一反应是“这App在防我”&#xff0c;继而联想到银行类App、考试系统、视频平台的“安全策略”&#xff0c;甚至下意识觉得背后有某种“硬隔离”或“内核级防…...

MyBinder实战:零配置在iPad上运行Python数据分析

1. 项目概述&#xff1a;当iPad遇上Python&#xff0c;一次环境配置的“降维打击” 几年前&#xff0c;当我第一次在编程工作坊里&#xff0c;看到有学员掏出iPad&#xff0c;一脸期待地问我“老师&#xff0c;这个能跑今天的代码吗&#xff1f;”时&#xff0c;我的回答通常是…...

【VibeCoding系列教程02】2026年AI编程避坑实录:这三大误区,让我多走了半年弯路

你们有没有发现&#xff0c;人这辈子最大的敌人不是别人&#xff0c;是自己脑子里那些乱七八糟的想法。前两天有个粉丝私信我&#xff0c;说老哥&#xff0c;我看你上次说Vibe Coding挺猛的&#xff0c;我也想学&#xff0c;但我有三个顾虑。我说你说说看。他说第一&#xff0c…...

Jupyter C内核:在Notebook中实现C语言交互式编程的完整指南

Jupyter C内核&#xff1a;在Notebook中实现C语言交互式编程的完整指南 【免费下载链接】jupyter-c-kernel Minimal Jupyter C kernel 项目地址: https://gitcode.com/gh_mirrors/ju/jupyter-c-kernel Jupyter C内核是一个开源项目&#xff0c;为Jupyter Notebook提供完…...

ESP32如何实现专业级音频录制?探索开源录音解决方案

ESP32如何实现专业级音频录制&#xff1f;探索开源录音解决方案 【免费下载链接】esp32_SoundRecorder ESP32 Sound recorder with simple code in arduino-esp32. (I2S interface) 项目地址: https://gitcode.com/gh_mirrors/es/esp32_SoundRecorder 在物联网和嵌入式开…...

如何在5分钟内彻底改变你的Illustrator工作流程:批量替换脚本终极指南

如何在5分钟内彻底改变你的Illustrator工作流程&#xff1a;批量替换脚本终极指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中重复的替换操作浪费宝贵…...

通过curl命令快速测试Taotoken大模型聚合接口的连通性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令快速测试Taotoken大模型聚合接口的连通性 在接入大模型服务时&#xff0c;直接使用curl命令进行接口测试是一种高效且…...

黑苹果终极简化方案:OpCore Simplify 让你的OpenCore配置变得前所未有的简单

黑苹果终极简化方案&#xff1a;OpCore Simplify 让你的OpenCore配置变得前所未有的简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的…...

用动态主题建模挖掘科学文献中的真实研究趋势

1. 项目概述&#xff1a;用主题建模“听懂”科学文献的集体心跳 你有没有翻过arXiv上每天新增的上千篇机器学习论文&#xff0c;却越看越迷糊——到底哪类研究正在真正升温&#xff1f;不是靠刷标题、不是靠猜作者名气&#xff0c;而是让成千上万篇论文自己“开口说话”&#x…...