【转载 ACM不挂科】 http://hi.baidu.com/acmbuguake/item/380c1344605f243311ee1e74

很多人都想改变对话框的背景图,其实很简单,只需要一个函数就可以了,不过还是有问题的,下面讲述。

只需要响应WM_ERASEBKGND消息,然后重载OnEraseBkgnd(CDC*pDC)这个函数就可以,首先我们要添加消息响应,由于该消息不能用MFC ClassWizard添加,因为ClassWizard没有该消息添加的选项,我们需要手动添加,只需要在消息响应MAP添加一下ON_WM_ERASEBKGND(),如下所示:

BEGIN_MESSAGE_MAP(CSerialTestDlg, CDialog)

//{{AFX_MSG_MAP(CSerialTestDlg)

ON_WM_ERASEBKGND()//添加重绘背景消息响应

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

我们然后进行消息响应,添加消息响应函数,然后在对话框类的声明文件添加该函数的声明virtual BOOL OnEraseBkgnd(CDC*pDC);在实现文件中进行该函数的书写,如:

BOOL CSerialTestDlg::OnEraseBkgnd(CDC*pDC)

{

CBitmap m_bitmap;

m_bitmap.LoadBitmap(IDB_DLGBK);//加载背景图片,选择你对应的图片ID

CDC dcCompatible;

dcCompatible.CreateCompatibleDC(pDC);

dcCompatible.SelectObject(&m_bitmap);

CRect rect;

GetWindowRect(&rect);

ScreenToClient(&rect);//选择客户区域

BITMAP bmp;

m_bitmap.GetBitmap(&bmp);

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);//绘制BMP背景图

m_bitmap.DeleteObject();

return TRUE;

}

但是这样做一般就可以,细心的人会发现字体有重叠,比如说静态文本框和EDIT控件,如果选择只读模式,作为输出,这时EDIT的背景是BMP背景图片,但是字体重叠,如下图,我这样就行消除。

用MFC ClassWizard添加WM_CTLCOLOR消息,如下图,然后编写该函数

HBRUSH CSerialTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr= CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

// TODO: Return a different brush if the default is not desired

switch(nCtlColor)

{

case CTLCOLOR_STATIC: //对所有静态文本控件的设置

{

pDC->SetBkMode(TRANSPARENT);//设置背景为透明

pDC->SetTextColor(RGB(0,0,0)); //设置字体颜色

return HBRUSH(GetStockObject(HOLLOW_BRUSH)); // 必须

}

case CTLCOLOR_DLG: //对所有静态文本控件的设置

{

pDC->SetBkMode(TRANSPARENT);

return hbr; //返回画刷句柄

}

default:

return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);

}

return hbr;

}

这里解决静态文本框背景,然后是关于字体重叠问题,只需要对EDIT控件进行隐藏,显示一下就可以了

((CEdit*)(GetDlgItem(IDC_EDIT_writetime)))->ShowWindow(SW_HIDE);

((CEdit*)(GetDlgItem(IDC_EDIT_writetime)))->SetWindowText(m_peoplelist.GetItemText(i,7));

((CEdit*)(GetDlgItem(IDC_EDIT_writetime)))->ShowWindow(SW_SHOW);

看看这样是不是可以了(*^__^*)嘻嘻……

PS:这里用到的函数,不理解可以百度或者MSDN,这里不解释,ACM不挂科版权所有,QQ:928765096,联系请发邮件lsjlhls@sina.com;转载请注明出处。

MFC 对话框 背景图片 以及消除 字体重影 字体重叠相关推荐

  1. MFC对话框背景图片的设置

    MFC对话框背景图片的设置 1.插入一个Bitmap的资源图片,假设资源名称为:IDC_BITMAP1(一般默认的第一个BMP文件是它,接下来的为IDC_BITMAP2,以此类推) 2.在CXXXDi ...

  2. MFC 对话框背景图片

    在windows开发当中做界面的主要技术之一就是使用MFC,通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现.今天我们来说一下如何用MFC美化对话框,默认情况下,对话框的背景如下 ...

  3. 设置MFC对话框背景图片

    来源:http://zhidao.baidu.com/question/172230752.html?an=0&si=4 先在资源里导入你的位图,分配好ID号: 在OnPaint()函数中: ...

  4. 重拾MFC小细节之动态更新对话框背景图片

    在大一时,学过MFC,不过那时刚接触编程,C/C++学完不久,跟重要的是没动手编程,后来又做ACM去了.现在大三了,各种实验课设老师都要求用VC可视化,于是借着机会学了点MFC皮毛,在此总结一些常用技 ...

  5. MFC_设置对话框背景图片

    MFC 设置对话框背景图片2010年08月06日 20:12MFC 设置对话框背景图片 基于VC6.0 (一) 在对话框类名上右键àAddWindows Message Handlerà为消息WM_P ...

  6. MFC处理背景图片切换时,背景上的按钮图片不变化

    近期项目中需要在一个MFC对话框中轮播显示图片,效果如下: 一共5张背景图,图上有5个小圆点轮流播放显示,并且小圆点加亮,右上角是关闭按钮,鼠标放上去按钮变红色. 最开始的方案是在dlg上添加一个pi ...

  7. 改变MFC对话框背景色、控件内的字体颜色和背景色

    原文转自http://www.rosoo.net/a/201408/17018.html C 设置 Dialog, Group Box, Static Text, Check Box, Edit Ct ...

  8. MFC 加入背景图片并让控件背景透明

    /*加入背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) {  // TODO: 在此加入消息处理程序代码和/或调用默认值  CDialog::OnEraseB ...

  9. MFC添加背景图片方法

    此文系转载,忘了博客地址了 VC++中如何给对话框加背景图片(2010-03-22 16:57:59) 方法一: 1.声明成员变量CBrush m_brush; 2.在InitDialog中添加代码: ...

最新文章

  1. mysql主从复制实战
  2. 一个操作系统的实现第九章笔记
  3. 【深度学习入门到精通系列】神经进化 (NeuroEvolution)
  4. 《微信小程序:开发入门及案例详解》—— 3.4 小结
  5. 转货币格式和 rgb转hex
  6. android jni打印log信息
  7. 基于stm32简易计算机电路图,基于STM32的简易电子计算器设计与实现(DOC).doc
  8. 8位移位寄存器和优先编码器
  9. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(2)
  10. spring boot 实战
  11. Java方法中数组_Java中数组常用方法的总结
  12. 3-19pytorch与矩阵分解SVD
  13. springboot中配置过滤器以及可能出现的问题
  14. vue不是内部或外部命令_vue脚手架
  15. 3 ELK收集nginx正常和错误日志
  16. 初识webservice 服务
  17. 测试工具JMeter详细安装配置教程(保证一次安装成功)
  18. PHP+node采集58微聊聊天信息
  19. Securing Checklists
  20. 【已完美解决】由于找不到MSVCR100.dll,无法继续执行代码。重新安装程序可能会解决此问题。DirectX修复工具下载

热门文章

  1. Oracle 修改表名
  2. c语言1 3章考试,江苏省计算机等级考试C语言第一至三章考点
  3. 安装govendor govendor不生效
  4. 威海高考2021成绩查询,2021年威海高考状元名单公布,威海高考状元学校资料及最高分...
  5. 硬盘缓存使用类SHDiskCache,缓存的基本操作、时长管理以及数据回调
  6. Map的几种循环方法
  7. 【OpenGL】02 - OpenGL中的坐标系
  8. 【python】seaborn绘制小提琴图和箱线图
  9. 工行=ICBC=爱存不存?银行缩写也搞笑
  10. redis mysql主从同步_Redis主从数据库同步