(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);//最后刷新对话框背景
正在阅读:
《电力拖动自动控制系统》正文09-19
我喜欢的游戏作文450字07-09
新员工试用期管理办法03-03
中华人民共和国商业银行法释义:第二十四条05-12
2005年上半年网络工程师下午试卷(解析)--网络工程师试题及答案04-06
STM32FEBKC6T6 32位ARM 电动车行业专供 完全替代STM32F103C6T612-18
2015新生儿培训试题01-26
年开展打击非法行医专项行动和非法采供血专项整治工作总结08-17
分析化学考试试卷及答案104-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 控件
- 透明
- 背景
- 设置
- static
- 关于
- 问题
- MFC