(MFC)关于设置static控件背景透明的问题
更新时间:2024-07-07 07:14:01 阅读量: 综合文库 文档下载
- mfc设置控件背景透明推荐度:
- 相关推荐
想要使static控件背景透明,我们需要响应WM_CTLCOLOR消息,重载OnCtlColor函数。内容如下: HBRUSH CteststaticDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{ }
注意,只有返回空画刷才真正的实现了透明,否则还是不透明,如果把返回空画刷的内容注释掉,则出现如下情况:(使用的另一个程序,对话框背景色设置为绿色,方便对比)
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改DC的任何特性 if(pWnd->GetDlgCtrlID() == IDC_STATIC) { }
// TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr;
pDC->SetTextColor(RGB(255,200,100)); pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
//返回一个空画刷
所以,返回空画刷是必须的。
但是,这样就出现了一个新的问题:,当我们点击一个按钮更新标签上面的文字时,会造成重叠在一起,先看一下效果:
可以通过以下方式使Static控件文本在透明状态下改变时不会产生文本重叠问题: 1、由于Static控件的背景已经是透明的了,那么旧文本应该是画在Static控件的父窗口上的。 2、在给Static控件设置新文本之后(不是之前!)刷新父窗口即可。例如: GetDlgItem(IDC_STATIC_TEST)->SetWindowText(_T(\北京2008\
GetDlgItem(IDC_STATIC_TEST)->GetParent()->RedrawWindow();
IDC_STATIC_TEST为控件ID号。
3、用上面方法刷新的是整个父窗口客户区,界面会闪烁,可以通知父窗口只刷Static控件所在的RECT区域,就不会闪烁了。 CRect rtlbl; GetDlgItem(IDC_STATIC)->GetWindowRect(&rtlbl); ScreenToClient(&rtlbl); //转到客户端界面 InvalidateRect(&rtlbl);//最后刷新对话框背景
正在阅读:
单位介绍信范文02-21
企业常用会计科目表 科目解析07-26
统计学期中考试复习参考资料05-28
2015年中国传媒大学在职艺术硕士(MFA)复试内容心得05-28
专升本《计算机网络》 - 试卷 - 答案10-15
多用电表的设计与组装论文04-11
论文格式006-17
数据结构课设报告-算术表达式求值09-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 控件
- 透明
- 背景
- 设置
- static
- 关于
- 问题
- MFC