MFC窗体背景颜色的设置、控件白色背景问题、控件文本显示重叠问题、被父窗体背景覆盖的问题

文章目录

  • 设置mfc窗体背景颜色
  • 窗体设置背景颜色后解决控件白色背景
  • 解决重复修改控件文本后重叠的问题
  • 自绘控件被父窗体背景覆盖的问题

设置mfc窗体背景颜色

设置窗体的背景颜色非常简单,只需要在窗体的OnEraseBkgnd里面填充窗体背景就可以了,甚至直接画一张背景图片(一般在OnPaint函数里画背景图片)。

OnEraseBkgnd(CDC* pDC)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	CBrush brushBg;
	brushBg.CreateSolidBrush(RGB(51, 51, 51)); // 创建红色画刷
	CRect rect;
	GetClientRect(&rect); // 获取窗口客户区大小
	pDC->FillRect(&rect, &brushBg); // 使用自定义画刷填充背景
	return TRUE;// 返回 TRUE 表示背景已经擦除,不需要再次擦除
	return CDialogEx::OnEraseBkgnd(pDC);
}

窗体设置背景颜色后解决控件白色背景

窗体在设置背景色或者背景图片后,控件的背景会变成白色。
对于静态文本控件,显示的内容关系,默认的控件背景没有改变,因此会有白色的控件背景和文字背景
在这里插入图片描述
需要在OnCtlColor里面设置控件背景透明,方法就是返回一个空画刷。同时文本背景也设置成透明

HBRUSH DlgP::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何特性
	if (nCtlColor == CTLCOLOR_STATIC)//对于文本控件实现背景透明
	{
		pDC->SetTextColor(RGB(222, 222, 222));//设置字体颜色
		pDC->SetBkMode(TRANSPARENT);//文本背景透明
		return (HBRUSH)::GetStockObject(NULL_BRUSH);//控件背景透明
	}
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}

解决重复修改控件文本后重叠的问题

设置窗体背景色后,控件文本改变后不能得到背景的刷新。因此会造成重叠。
获取控件在客户区的坐标区域,只有使用GetWindowRect和ScreenToClient进行屏幕坐标转换,再配合GetClientRect函数获取控件大小,才能够真正获取到控件在窗体中的相对位置。网上其他的办法,多数是错的。

//获取控件在客户区的坐标区域
	RECT get_control_rect_in_client(CWnd* control){
		RECT rc;
		//获取控件在屏幕中位置
		control->GetWindowRect(&rc);
		//将左上坐标转化成点
		POINT p;
		p.x = rc.left;
		p.y = rc.top;
		//将点坐标在屏幕位置转化成在本窗体客户区位置
		this->ScreenToClient(&p);
		//获取控件区域大小
		control->GetClientRect(&rc);
		//真正的在客户区的区域
		rc.right = p.x + rc.right - rc.left;
		rc.left = p.x;
		rc.bottom = p.y + rc.bottom - rc.top;
		rc.top = p.y;
		return rc;
	}

设置控件所在区域为无效区,rc是上面代码里面获取控件在客户区的坐标区域

InvalidateRect(&rc,true);

之后立即使用updatewindow更新无效区

UpdateWindow();

就可以解决文本重叠问题

自绘控件被父窗体背景覆盖的问题

有的控件如按钮属性设置为ownerdraw并且进行自绘操作
在这里插入图片描述
父窗体如果有背景色或者背景图片,刷新就会导致直接覆盖ownerdraw属性的子控件。
解决方法是设置父窗体的属性为Clip Children,这样父窗体就不会刷新子控件区域
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/266315.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloud】-GateWay源码解析

GateWay系列 【SpringCloud】-GateWay网关 一、背景介绍 当一个请求来到 Spring Cloud Gateway 之后,会经过一系列的处理流程,其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧 二、正文 …

30. MVC设计模式

JavaEE 开发流程 ↓MVC的概念 MVC是Model-View-Controller的简称,即模型-视图-控制器。 MVC是一种设计模式,它把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。 模型(model) 模型是应用程序的主体部分…

JavaEE进阶学习:Spring MVC 程序开发

1.什么是 Spring MVC Spring Web MVC 是基于Servlet API 构建的原始 Web 框架,从一开始就包含在Spring 框架中。它的正式名称 “Spring Web MVC” 来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。 从上述定义我们可以得出两个关键信…

每日一题——轮转数组

1. 题目描述 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例1: 输入:nums [1,2,3,4,5,6,7],k 3 输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1步:[7,1,2,3,4,5,6] 向右…

在Linux下探索MinIO存储服务如何远程上传文件

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 创建Buckets和Access Keys二. Linux 安装Cpolar三. 创建连接MinIO服务公网地…

LED灯驱动模块加载与卸载代码框架

一. 简介 本文来编写 LED灯驱动模块加载与卸载的代码。 二. LED灯驱动模块加载与卸载代码框架 1. 创建工程 我的驱动代码存放目录: ubuntu系统 /home/wangtian/zhengdian_Linux/Linux_Drivers 目录下。 进入 /home/wangtian/zhengdian_Linux/Linux_Drivers 目…

Java开发框架和中间件面试题(4)

27.如何自定义Spring Boot Starter? 1.实现功能 2.添加Properties 3.添加AutoConfiguration 4.添加spring.factory 在META INF下创建spring.factory文件 6.install 28.为什么需要spring boot maven plugin? spring boot maven plugin 提供了一些像jar一样打包…

优先级队列与仿函数

优先级队列 优先级队列 priority_queue 是一种容器适配器&#xff0c;听起来是队列&#xff0c;其实它的底层数据结构是堆&#xff0c;所谓的优先级为默认越大的数优先级越高&#xff0c;即默认为大堆。 使用方式如下面的代码&#xff1a; #include<iostream> #includ…

做抖店需要保证金吗?总共需要多少资金?具体资金投入如下!

我是电商珠珠 做抖店需要保证金吗&#xff1f;这是很多想要入驻的新手常问的问题。我的回答是&#xff0c;需要&#xff01; 抖店平台之所以设立保证金&#xff0c;就是为了约束商家的行为&#xff0c;避免交易市场出现混乱&#xff0c;给用户一个良好的购物体验。 今天呢&a…

【性能优化】MySql数据库查询优化方案

阅读本文你的收获 了解系统运行效率提升的整体解决思路和方向学会MySQl中进行数据库查询优化的步骤学会看慢查询、执行计划、进行性能分析、调优 一、问题&#xff1a;如果你的系统运行很慢&#xff0c;你有什么解决方案&#xff1f; ​关于这个问题&#xff0c;我们通常首先…

Unity中Shader观察空间推导

文章目录 前言一、本地空间怎么转化到观察空间二、怎么得到观察空间的基向量1、Z轴向量2、假设 观察空间的 Y~假设~ (0,1,0)3、X Y 与 Z 的叉积4、Y X 与 Z 的叉积 三、求 [V~world~]^T^1、求V~world~2、求[V~world~]^T^ 四、求出最后在Unity中使用的公式1、偏移坐标轴2、把…

[每周一更]-(第31期):Mysql安装汇总

写自&#xff1a;20230204 23:25 一. mysql rpm二进制包 rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm yum install mysql-community-server service mysqld start set password password(“123456”)二. mysql yum安装 1、安装查看有没有安装…

企业级“RAS”的数据平台如何炼成?

从“看报表”到“数据分析结果直接投入运营”&#xff0c;数字化正在深入企业经营&#xff0c;数据系统正在成为核心生产系统。相应的&#xff0c;企业对“作业挂了”、“系统崩了”、“算不出来”的容忍度越来越低——只有足够稳定、可靠、专业的数据系统&#xff0c;才能及时…

智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社交网络算法4.实验参数设定5.算法结果6.…

el-select 全选

<template><div class"container"><el-selectv-model"choosedList"clearablemultiplecollapse-tagsplaceholder"请选择"change"select_Change"><div style"padding: 0 20px; line-height: 34px">&l…

机器学习算法(11)——集成技术(Boosting——梯度提升)

一、说明 在在这篇文章中&#xff0c;我们学习了另一种称为梯度增强的集成技术。这是我在机器学习算法集成技术文章系列中与bagging一起介绍的一种增强技术。我还讨论了随机森林和 AdaBoost 算法。但在这里我们讨论的是梯度提升&#xff0c;在我们深入研究梯度提升之前&#xf…

Python实现AR协方差结构线性回归模型(GLSAR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 GLSAR是具有AR协方差结构的广义最小二乘法线性回归模型。 本项目通过GLSAR回归算法来构建AR协方差结构…

RocketMQ实践:确保消息不丢失与顺序性的高效策略

一、使用RocketMQ如何保证消息不丢失&#xff1f; 这个是在面试时&#xff0c;关于MQ&#xff0c;面试官最喜欢问的问题。这个问题是所有MQ都需要面对的一个共性问 题。大致的解决思路都是一致的&#xff0c;但是针对不同的MQ产品又有不同的解决方案。分析这个问题要从以 下几…

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统

02&#xff5c;用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统 项目及实现框架 我们先来整体了解一下这个项目。 项目名称&#xff1a;“易速鲜花”内部员工知识库问答系统。 项目介绍&#xff1a;“易速鲜花”作为一个大型在线鲜花销售平台&#xff0c;有自…

基于java的病房管理系统论文

摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花费大量的人员和资金来管理用纸质文…