GDI MFC抠图贴图

news2024/12/27 12:56:24

文章目录

  • 抠图
  • 贴图
  • 添加消息命中

在这里插入图片描述

抠图

请添加图片描述

BOOL CPokemonDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	//加载图片
	//CBitmap m_bmp;
	m_bmp.LoadBitmap(IDB_BITMAP1);
	//获取图片的宽和高
	BITMAP logBmp;
	m_bmp.GetBitmap(&logBmp);
	//创建内存DC
	CDC memDC;
	memDC.CreateCompatibleDC(NULL);
	memDC.SelectObject(&m_bmp);
	//移动窗口大小
	MoveWindow(300, 200, logBmp.bmWidth, logBmp.bmHeight,TRUE);

	//创建不规则窗口
	CRgn m_wndRgn;
	m_wndRgn.CreateRectRgn(0,0, logBmp.bmWidth,logBmp.bmHeight);
	//挖掉空白
	for (int x = 0; x < logBmp.bmWidth; x++)
	{
		for (int y = 0; y < logBmp.bmHeight; y++)//循环获取每一个像素点
		{
			CRgn rgn;
			rgn.CreateRectRgn(x, y, x + 1, y + 1);

			if (memDC.GetPixel(x, y) == RGB(0, 0, 0))
			{
				m_wndRgn.CombineRgn(&m_wndRgn, &rgn, RGN_XOR);//去除白色
			}
		}
	}
	SetWindowRgn(m_wndRgn,TRUE);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

在这里插入图片描述

贴图

void CPokemonDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		//贴图
		CPaintDC dc(this);
		//创建内存DC
		CDC memDC;
		memDC.CreateCompatibleDC(&dc);
		memDC.SelectObject(&m_bmp);

		//获取图片的宽和高
		BITMAP logBmp;
		m_bmp.GetBitmap(&logBmp);
		//贴图
		dc.BitBlt(0, 0, logBmp.bmWidth, logBmp.bmHeight,&memDC,0,0, SRCAND);
		CDialogEx::OnPaint();
	}
}

在这里插入图片描述

添加消息命中

在这里插入图片描述

LRESULT CPokemonDlg::OnNcHitTest(CPoint point)
{
	LRESULT result = CDialogEx::OnNcHitTest(point);
	if (result == HTCLIENT)
	{
		result = HTCAPTION;
	}

	return result;
}

在这里插入图片描述
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 中的 RabbitMQ 是什么,如何使用

Spring Boot 中的 RabbitMQ 是什么&#xff0c;如何使用 简介 RabbitMQ 是一个开源的消息队列系统&#xff0c;它通过 AMQP&#xff08;高级消息队列协议&#xff09;来实现消息的传递。Spring Boot 是目前非常流行的 Java 开发框架&#xff0c;它提供了很多便利性的功能&…

VS Code C++迎来套件更新,注释定义方便快捷

近日微软对VS Code C进行套件的更新&#xff0c;新加入名为“Call Hierarchy”的功能&#xff0c;而这个**ERP**功能可以让用户更加直观地理解代码函数之间的引用关系&#xff0c;同时该版本还让开发者更容易复制注释与定义&#xff0c;提升此类内容编写时的自由度。 据悉&am…

蓝牙音频数据歌词提取器设计方法

v hezkz17进数字音频系统研究开发交流答疑 解决方法&#xff1a; 通过蓝牙接收来自手机音乐播放器的数据&#xff0c;能得到哪些歌曲信息? 如何获取歌曲名&#xff1f;歌词信息&#xff1f; 2023/6/27 10:21:42 通过蓝牙接收手机音乐播放器的数据&#xff0c;可以获取以下歌曲…

VMware 虚拟机下ubuntu命令行(parted)扩容方法,包括一些坑

前言 搜素了半天关于ubuntu扩容的方法&#xff0c;基本都是用gparted&#xff0c;可是本人的虚拟机抽风无法使用这个工具&#xff0c;提示tmp.mount不存在&#xff0c;同时Can’t connect to “”&#xff0c;找了半天并没有找到好的解决方案&#xff0c;先占坑。使用命令行扩…

如何实现Tomcat部署及优化

目录 一、Tomcat概述 Tomcat中的核心组件&#xff08;用于Java环境&#xff09; Tomcat两种优化 Tomcat Web服务 JSP容器&#xff08;翻译功能&#xff09; Servlet处理动态页面 二、Tomcat内部工作流程 三、Tomcat功能组件结构 Connector连接器 Container容器 四个…

openlayers controls基础知识

控件是一个可见的小部件&#xff0c;其 DOM 元素位于屏幕上的固定位置。 它们可以涉及用户输入&#xff08;按钮&#xff09;&#xff0c;或者仅提供信息&#xff1b; 位置是使用 CSS 确定的。 默认情况下&#xff0c;它们放置在 CSS 类名为 ol-overlaycontainer-stopevent 的容…

小白月赛C-方豆子

方豆子 题目描述 阿宁最近对吃豆子感兴趣&#xff0c;阿宁想要用程序输出一下&#xff0c;但是图形化对于阿宁来说太难。因此他决定用字符&#xff0c;并且是方形的模样。 给一个正整数n&#xff0c;输出n级好豆子。 题解&#xff1a;每个豆子都由四个豆子组成&#xff0c…

Vue之计算属性(computed)

文章目录 前言一、计算属性二、实例1.缓存优势计算属性内部的属性&#xff0c;在第一次访问时会读取它的值&#xff0c;然后存入缓存 2.简写简写其实就是当确定计算属性内的属性只读不更改&#xff0c;即只有get函数没有写set函数时简写的方式 3.补充 总结 前言 计算属性 一、…

Odoo16 微信公众号模块开发示例

Odoo16 微信公众号模块开发示例 本模块基于 aiohttp asyncio 进行异步微信公众号接口开发, 仅实现了部分 API 仅供学习参考&#xff0c;更完善的同步接口请参考&#xff1a;wechatpy 或 werobot&#xff0c;可用来替代 模块中的 wechat client。 业务需求 小程序中需要用户…

std::bind的讲解

一、在讲解std::bind之前&#xff0c;我们先来复习下std::function。 std::function 是一个“可调用对象”包装器&#xff0c;是一个类模板&#xff0c;可以容纳除了类成员函数指针之外的所有可调用对象&#xff0c;它可以用统一的方式处理函数、函数对象、函数指针&#xff0…

async创建异步任务

想让线程之间可以有两个数据的交换。之前一直采用的是全局变量互斥锁的方法。到目前为止&#xff0c;线程运行完之后还无法提供一个返回值。 此时引入 future 和 async。 sync为同步的意思&#xff0c;async为异步任务。同步任务前文已经结束过&#xff1a;他指的是两个人协同…

SpringBoot 日志文件:日志的作用?为什么要写日志?

文章目录 &#x1f387;前言1.日志长什么样子&#xff1f;2.自定义打印日志2.1 在程序中得到日志对象2.2 使用日志对象打印日志 3.日志级别3.1 日志级别的分类与使用3.2 日志级别有什么用呢&#xff1f;3.3 日志级别的设置 4.日志持久化保存5.更方便的日志输出5.1 添加 lombok …

Celery分布式异步框架

Celery异步任务框架 """ 1&#xff09;可以不依赖任何服务器&#xff0c;通过自身命令&#xff0c;启动服务(内部支持socket) 2&#xff09;celery服务为为其他项目服务提供异步解决任务需求的 注&#xff1a;会有两个服务同时运行&#xff0c;一个是项目服务&a…

Android 自定义View和事件分派 图解

Android 自定义View和事件分派 图解_猎羽的博客-CSDN博客https://blog.csdn.net/feather_wch/article/details/131487012

并查集和LRUCache

目录 1. 并查集 1.1原理 1.2实现 1.3应用 1.3.1省份数量 1.3.2等式方程的可满足性 2.LRUCache 1.概念 2.实现 3.JDK中类似LRUCahe的数据结构LinkedHashMap 4.LRU Cache的OJ 1. 并查集 1.1原理 把不同的元素划分到不想交的集合.开始时,每个元素自成一个单元集合,然后…

OSGI-Bundle:概念和入门

OSGI(Open Service gateway initactive)是java动态化模块系统的一系列规范。即一个系统应用上可以有很多可插拔的小应用&#xff0c;整个应用能运行和协调&#xff0c;小应用之间也可以相互交互完成业务需求。 Bundle: bundle 是以 jar 包形式存在的一个模块化物理单元&#x…

Ceph:关于 Ceph 用户认证授权管理的一些笔记

写在前面 准备考试&#xff0c;整理 Ceph 相关笔记博文内容涉及, Ceph 用户管理&#xff0c;认证管理&#xff0c;权限管理 以及相关 Demo理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&…

antdesginVue a-date-picker(日期时间选择器)禁用当前时间之前的时间,包含时分秒

antdesginVue a-date-picker(日期时间选择器)禁用当前时间之前的时间&#xff0c;包含时分秒 话不多说直接上效果 <a-form-item label"发生时间" name"start_time"><a-date-pickerstyle"width: 100%"allowClearv-model:value"f…

C++模板进阶知识

文章目录 前言模板进阶1.非类型模板参数2.模板的特化2.1概念2.2函数模板特化2.3类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例 3.模板的分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法 4 模板总结 后记 前言 之前我们讲过模板初阶的知识&#xff0…

Linux 解决root用户被限制连接服务器

Linux 解决root用户被限制连接服务器 1. 问题描述2. 解决问题2.1 方式一&#xff08;忘记root密码的情况&#xff09;2.2 方式二&#xff08;知道root密码的情况&#xff09; 3. 其他 1. 问题描述 使用 root 用户不能链接服务器&#xff0c;密码对&#xff0c;就是连接不上&am…