MFC对话框添加了背景图后,会导致控件周围有阴影,很不美观,因此,我们需要将阴影进行透明化处理。此时需要使用到MFC中的消息函数OnCtlColor()。

一、添加OnCtlColor()函数

1、对话框,右键选择类向导

2、进入类向导,依次选择“消息”、“WM_CTLCOLOR”、“添加处理程序”、“应用”、“确定”。

3、添加完了消息函数之后,主对话框cpp中会出现OnCtlColor()函数,当你打开对话框时,这个函数就会自动被调用,一般静态控件的背景就会被透明。

HBRUSH CCPP2018Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);//< TODO:  在此更改 DC 的任何特性//< TODO:  如果默认的不是所需画笔,则返回另一个画笔return hbr;
}

或者添加以下代码:

HBRUSH CCPP2018Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);//< TODO:  在此更改 DC 的任何特性if(nCtlColor == CTLCOLOR_STATIC ){pDC->SetBkMode(TRANSPARENT);//<设置背景透明return (HBRUSH)::GetStockObject(NULL_BRUSH);}//< TODO:  如果默认的不是所需画笔,则返回另一个画笔return hbr;
}

二、以上都不能处理单选按钮和复选框的背景,需要添加以下代码

HBRUSH CCPP2018Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);//< TODO:  在此更改 DC 的任何特性UINT id = pWnd->GetDlgCtrlID();if(id == IDC_RADIO_EXPMODE||IDC_RADIO_TRAINMODE||IDC_CHECK_TRACK||IDC_CHECK_SCENE||IDC_EXIT_BUTTON||IDC_MIN_BUTTON){pDC->SetBkMode(TRANSPARENT);CRect rc;pWnd->GetWindowRect(&rc);ScreenToClient(&rc);CDC* dc = GetDC();pDC->BitBlt(0,0,rc.Width(),rc.Height(),dc,rc.left,rc.top,SRCCOPY);  //<把父窗口背景图片先画到按钮上ReleaseDC(dc);hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);}   //< TODO:  如果默认的不是所需画笔,则返回另一个画笔return hbr;
}

《MFC 控件透明处理》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py
  2. 1101 Quick Sort (25 分)【难度: 一般 / 知识点: 快排】
  3. RobotFramework安装扩展库包autoitlibrary(四)
  4. 2680 Problem F: Coin Game
  5. mysql+5.6+左连接_第5章 索引与算法
  6. linux远程登录模拟输入输出重定向,从零开始学习Linux(三十三):Shell基础之输入输出重定向...
  7. 莫陷入点击和评论陷阱
  8. linux文件传输阻塞了,Linux 中的read系统调用到底是阻塞还是非阻
  9. TracePro v6.02 Win32-ISO 1CD(光学机构仿真软件\
  10. access mysql并发_多用户同时使用ACCESS
  11. 【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第四章
  12. 空间后方交会编程c语言,C语言空间后方交会源代码.doc
  13. 6款好用的在线思维导图工具推荐
  14. 第二章 年轻人都是富翁
  15. 华中农业大学计算机学院院长,魏小梅-华中农业大学-信息学院
  16. 数据库查询+数据库备份+数据库恢复
  17. 低功耗读卡(RFID)电路与程序实现
  18. wxminiapp中NeteaseCloudMusicApi接口服务器的搭建
  19. 笔记一:Dreamware的页面转格式到Visual Studio
  20. android one s5,HTC One M9和三星Galaxy S5哪个好

热门文章

  1. 分枝定界法(Branch-and-Cut)
  2. 基于软件仿真的PLC系统测试技术
  3. 深信服虚拟服务器设置ip,深信服服务器虚拟化asv操作步骤.pdf
  4. 金银猫 服务器维护,金银猫案情进展 投资者可在网上登记报案
  5. CardView介绍
  6. 系统服务器软件 服务器操作软件,服务器操作系统和服务器软件
  7. Android之adb安装apk
  8. 视音频编解码H264,265,MPEG-4,VP8,VP9知识总结
  9. 一键进入高通9008模式_高通3040芯片?游戏模式超低延迟?南卡lite pro全新升级!...
  10. 易语言制作的QQ聊天中常用的GIF图片【带源码下载】