77范文网 - 专业文章范例文档资料分享平台

(MFC)关于设置static控件背景透明的问题

来源:网络收集 时间:2019-03-06 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

想要使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);//最后刷新对话框背景

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库(MFC)关于设置static控件背景透明的问题在线全文阅读。

(MFC)关于设置static控件背景透明的问题.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/500918.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: