MFC 对话框 背景图片 以及消除 字体重影 字体重叠
【转载 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 对话框 背景图片 以及消除 字体重影 字体重叠相关推荐
- MFC对话框背景图片的设置
MFC对话框背景图片的设置 1.插入一个Bitmap的资源图片,假设资源名称为:IDC_BITMAP1(一般默认的第一个BMP文件是它,接下来的为IDC_BITMAP2,以此类推) 2.在CXXXDi ...
- MFC 对话框背景图片
在windows开发当中做界面的主要技术之一就是使用MFC,通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现.今天我们来说一下如何用MFC美化对话框,默认情况下,对话框的背景如下 ...
- 设置MFC对话框背景图片
来源:http://zhidao.baidu.com/question/172230752.html?an=0&si=4 先在资源里导入你的位图,分配好ID号: 在OnPaint()函数中: ...
- 重拾MFC小细节之动态更新对话框背景图片
在大一时,学过MFC,不过那时刚接触编程,C/C++学完不久,跟重要的是没动手编程,后来又做ACM去了.现在大三了,各种实验课设老师都要求用VC可视化,于是借着机会学了点MFC皮毛,在此总结一些常用技 ...
- MFC_设置对话框背景图片
MFC 设置对话框背景图片2010年08月06日 20:12MFC 设置对话框背景图片 基于VC6.0 (一) 在对话框类名上右键àAddWindows Message Handlerà为消息WM_P ...
- MFC处理背景图片切换时,背景上的按钮图片不变化
近期项目中需要在一个MFC对话框中轮播显示图片,效果如下: 一共5张背景图,图上有5个小圆点轮流播放显示,并且小圆点加亮,右上角是关闭按钮,鼠标放上去按钮变红色. 最开始的方案是在dlg上添加一个pi ...
- 改变MFC对话框背景色、控件内的字体颜色和背景色
原文转自http://www.rosoo.net/a/201408/17018.html C 设置 Dialog, Group Box, Static Text, Check Box, Edit Ct ...
- MFC 加入背景图片并让控件背景透明
/*加入背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 在此加入消息处理程序代码和/或调用默认值 CDialog::OnEraseB ...
- MFC添加背景图片方法
此文系转载,忘了博客地址了 VC++中如何给对话框加背景图片(2010-03-22 16:57:59) 方法一: 1.声明成员变量CBrush m_brush; 2.在InitDialog中添加代码: ...
最新文章
- mysql主从复制实战
- 一个操作系统的实现第九章笔记
- 【深度学习入门到精通系列】神经进化 (NeuroEvolution)
- 《微信小程序:开发入门及案例详解》—— 3.4 小结
- 转货币格式和 rgb转hex
- android jni打印log信息
- 基于stm32简易计算机电路图,基于STM32的简易电子计算器设计与实现(DOC).doc
- 8位移位寄存器和优先编码器
- Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(2)
- spring boot 实战
- Java方法中数组_Java中数组常用方法的总结
- 3-19pytorch与矩阵分解SVD
- springboot中配置过滤器以及可能出现的问题
- vue不是内部或外部命令_vue脚手架
- 3 ELK收集nginx正常和错误日志
- 初识webservice 服务
- 测试工具JMeter详细安装配置教程(保证一次安装成功)
- PHP+node采集58微聊聊天信息
- Securing Checklists
- 【已完美解决】由于找不到MSVCR100.dll,无法继续执行代码。重新安装程序可能会解决此问题。DirectX修复工具下载
热门文章
- Oracle 修改表名
- c语言1 3章考试,江苏省计算机等级考试C语言第一至三章考点
- 安装govendor govendor不生效
- 威海高考2021成绩查询,2021年威海高考状元名单公布,威海高考状元学校资料及最高分...
- 硬盘缓存使用类SHDiskCache,缓存的基本操作、时长管理以及数据回调
- Map的几种循环方法
- 【OpenGL】02 - OpenGL中的坐标系
- 【python】seaborn绘制小提琴图和箱线图
- 工行=ICBC=爱存不存?银行缩写也搞笑
- redis mysql主从同步_Redis主从数据库同步