2009-06-05 10:27:17|  分类: VC/MFC/C++ |  标签: |举报 |字号大中小 订阅

点击打开链接

一、添加WM_ERASEBKGND消息

1、对话框类的OnEraseBkgnd

a、首先,为了下面使用擦除背景的方便,先增加OnEraseBkgnd函数(WM_ERASEBKGND ),但好多新手都不知道对话框在那里找增加这个函数,来跟我来

快捷键Ctrl+W打开ClassWizard对话框(菜单->view->ClassWizard):选择Class Info,找到左下角的Message filter,下拉列表至最底部,选中Window,OK保存

b、我们再Ctrl+W 打开ClassWizard对话框,MessageMaps->Class Name:选择当前工程对话框->Object IDs:选择当前对话框->Messages:下拉找吧,WM_ERASEBKGND有了吧,双击或者Add Function,添加到下面的Member functions后,再双击就可以编辑此函数代码了

2、CMainFrame等非对话框的OnEraseBkgnd直接在Workspace中ClassView页的类名上右键菜单中的"Add Windows Message Hander... ”,在弹出的对话框左边列表中找到WM_ERASEBKGND消息,双击或点Add按钮就自动添加了。

3、当然除了以上的方法之外,如果对代码结构基本了解的话,还可以自己手动增加:

a、工程的头文件中增加擦出背景函数定义

afx_msg BOOL OnEraseBkgnd(CDC *pDC);

b、增加消息响应

BEGIN_MESSAGE_MAP(C******Dlg, CDialog)  // C******Dlg是你自己对话框的工程类

……

ON_WM_ERASEBKGND()

END_MESSAGE_MAP()

c、工程源文件cpp中增加此函数的操作部分

BOOL CYourDlg::OnEraseBkgnd(CDC   *pDC)

{

//在这里你想增加那些对图片背景处理的东西就随便填吧

return TRUE;

}

二、载入位图背景及控件的透明化

1、使用OnEraseBkgnd函数实现对话框位图背景

BOOL CYourDlg::OnEraseBkgnd(CDC   *pDC)   //增加擦出背景函数
{
CRect rect;
GetClientRect(&rect);

CBitmap m_pBmp;
BITMAP bm;
CDC dcMem;

m_pBmp.LoadBitmap(IDB_BITMAP1);
m_pBmp.GetBitmap(&bm);//得到位图尺寸

dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp);

pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真
pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),
   &dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(pOldBitmap);

return TRUE;
}

到这里就可以实现位图了,但STATIC控件背景不透明,显得很难看。

2、来我们让STATIC控件透明吧

HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_BTN || nCtlColor == CTLCOLOR_STATIC)
  
{  
         pDC->SetBkMode(TRANSPARENT);    
}  
return   HBRUSH(GetStockObject(HOLLOW_BRUSH));
}

到这里其实就可以了,BMP的图片背景实现了,文本框的透明也实现了。

3、补充说明:如果程序运行过程中,需要设置文本框的字体的话,会出现显示"字体重叠不刷新"的问题

4、这就要对该控件或者对话框处理了,要刷出新字体来。

CWnd* pWnd = GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText("guohaiyang.blog.163.com");//需要修改的控件标题

//这里可以刷整个对话框,但如果较频繁的话,很明显能看出来,就选择刷显示字体的那块区域就可以了
pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);

好了,没有问题了,剩下随便你玩吧,这个解决方法不像网上说的,非要借用人家的自己写的函数,现在完全用VC提供的就可以了,免得加这个那个的头文件

补充下,自己实验发现

pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);

并不能完全解决刷新问题

最终使用

this->RedrawWindow();

来实现

虽然会出现控件的明显闪屏现象,但不影响使用

如果有更好的方法请赐教~

[参考] http://guohaiyang.blog.163.com/blog/static/3213403720081027104147/

[参考] http://hi.baidu.com/wangpai7776/blog/item/179a9d314c28d2af5fdf0e6b.html

WM_ERASEBKGND消息及位图背景与透明的实现相关推荐

  1. 对话框找不到WM_ERASEBKGND消息的解决方法与对话框背景图片的载入方法

    From:  http://wmnmtm.blog.163.com/blog/static/38245714201041535119716/ 为了让对话框程序更为漂亮,一般都是在窗口的WM_ERASE ...

  2. MFC基于对话框如何添加位图并使位图背景透明(TransparentBlt函数)

    MFC中比较重要的一部分学习内容即是绘图,而绘图时我们会发现如果想插入一张图片而又不想要图片的背景,或者已经把图片的背景用Ps去掉了,但是在MFC窗口中显示图片的时候又有了白色的背景,这个时候就可以使 ...

  3. Windows界面编程第一篇 位图背景与位图画刷

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列主要讲解Wi ...

  4. php设置背景为透明,css如何设置背景颜色透明?css设置背景颜色透明度的两种方法介绍...

    在网页布局中有时为了网页的整体美观,可能需要将网页中的某些部分设置为背景颜色透明,那么如何设置背景颜色透明呢?本篇文章就来给大家介绍一下css设置背景颜色透明的方法. 在css中设置背景颜色透明的方法 ...

  5. 背景全透明 background: transparent

    {background:transparent} 这是显示全部透明的命令,最前面添加目标即可. transparent 有"透明"之意.也就是说,如果一个元素没有指定背景色,那么背 ...

  6. 如何给 Visual C++ 中的对话框增加位图背景

    如何给 Visual C++ 中的对话框增加位图背景 Visual C++ 是 Microsoft 至今最全面和最完善的程序开放产品之一,它提供了一组各种各样的为适应几乎每一种编程风格而设计的工具,在 ...

  7. CSS 设置背景颜色透明,文字不透明

    2019独角兽企业重金招聘Python工程师标准>>> 通常情况下,设置<div>的背景颜色透明,那么<div>中的文字也会相应的透明化. <div&g ...

  8. 设置按钮背景为透明去掉button按钮左右两边的留白

    设置按钮背景为透明 style="background-color:transparent;border:0" 去掉button按钮左右两边的留白 style="over ...

  9. blender设置渲染图背景(透明或纯色)

    想要实现以下功能,设置渲染图的背景为透明或者纯色. 设置为透明背景,勾选上film-transparent即可: 设置为自定义颜色,设置world-surface-color即可:

最新文章

  1. WinDbg安装与使用
  2. 2008年5月网络管理员考试上午试卷参考答案
  3. var let const声明变量的区别
  4. 【OpenCV3】平滑处理详解
  5. 96秒100亿!如何抗住双11高并发流量?
  6. JVM调优总结(三)-基本垃圾回收算法
  7. node process.env.NODE_ENV 使用 cross-env 配置 设置
  8. POJ 1759 Garland
  9. html状态栏透明,HTML – 如何使我的导航栏略微透明?
  10. 简谈二维码(QRcode)的C语言生成,在单片机平台的实现
  11. vue项目用electron打包成windows(.exe)桌面应用--操作步骤、填坑方法、基础设置
  12. 2019最值得关注的科技趋势【附罗振宇跨年演讲视频】
  13. 5000字干货 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
  14. arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较
  15. 【Arduino+ESP32专题】一起来读INA3221数据手册 1
  16. 考研计算机专业的优点和缺点,领航考研:跨专业考研优缺点分析
  17. 《被讨厌的勇气》——第四夜阅读摘记
  18. 兆信rxn305d使用说明书_直流电源 RXN-305D-II
  19. CUG中国地质大学(武汉)现代软件国际会议用例图活动图状态图
  20. AOPA考证流程与考试步骤(非常详细)

热门文章

  1. 调和数,1加二分之一加三分之一加到 n 分之一
  2. 计算机图形学 构成立方体数据结构的简单表结构,计算机图形学-沈工大作业管理ppt课件...
  3. Exceeded checkpoint tolerable failure threshould【记一次flink上线异常】
  4. 抖音用什么编程语言_抖音app开发者的心路历程:论开发者的一些经验之谈
  5. 高中信息技术合格考试Python编程知识点全整理【连载....】
  6. 【Git】使用gitblit搭建一个简单的局域网服务器
  7. hashCode() vs equals() vs ==
  8. Linux下硬盘加密
  9. hue oozie rerun使用问题记录
  10. wifidog 配置中文说明