MFC对话框的透明化---续
一开始以为button的透明化只要在OnCtlColor中进行画图就好了。
HBRUSH CTestDialogProDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);//< TODO: 在此更改 DC 的任何特性if(nCtlColor == CTLCOLOR_STATIC ){pDC->SetBkMode(TRANSPARENT);//<设置背景透明return (HBRUSH)::GetStockObject(NULL_BRUSH);}// UINT nID = pWnd->GetDlgCtrlID();if (pWnd->GetDlgCtrlID() == IDC_BUTTON1){//有问题??pDC->SetBkMode(TRANSPARENT);CRect rc;pWnd->GetWindowRect(&rc);ScreenToClient(&rc);//pWnd->GetClientRect(&rc);//ClientToScreen(&rc);CDC* dc = GetDC();dc->BitBlt(0,0,rc.Width(),rc.Height(),pDC,rc.left,rc.top,SRCCOPY); //把父窗口背景图片先画到按钮上//截图,拷贝ReleaseDC(dc);hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);} //< TODO: 如果默认的不是所需画笔,则返回另一个画笔return hbr;
}
结果发现没啥用。
仔细研究后,看到一些很有意思的东西。
在CDialogEx类中,重写了WM_CTLCOLOR消息
HBRUSH CDialogEx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{if (m_brBkgr.GetSafeHandle() != NULL || m_hBkgrBitmap != NULL){
#define AFX_MAX_CLASS_NAME 255
#define AFX_STATIC_CLASS _T("Static")
#define AFX_BUTTON_CLASS _T("Button")if (nCtlColor == CTLCOLOR_STATIC){TCHAR lpszClassName [AFX_MAX_CLASS_NAME + 1];::GetClassName(pWnd->GetSafeHwnd(), lpszClassName, AFX_MAX_CLASS_NAME);CString strClass = lpszClassName;if (strClass == AFX_BUTTON_CLASS || strClass == AFX_STATIC_CLASS){pDC->SetBkMode(TRANSPARENT);if (m_brBkgr.GetSafeHandle() != NULL && CThemeHelper::IsAppThemed()){return (HBRUSH)m_brBkgr.GetSafeHandle();}else{return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);}}}}return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
可以看到,对static和button控件来说,只要是设置了背景色或者背景图的dialog,CDialogEx都会把控件背景透明化。我们自己实现控件的透明就可以参考这部分代码来实现。然后,前面那篇就成了废话。
接下来就说怎么button的背景透明吧。
原始的CButton类基本做不到背景透明,必须进行派生,然后重绘。但是在VS2010中,有了一个加强版CMFCButton类,这个类是可以通过简单的设置达到背景透明的目的的。
首先定义控件类为CMFCButton。
CMFCButton m_bttnTest;
然后设置按钮属性
BOOL CTestDialogProDlg::OnInitDialog()
{CDialogEx::OnInitDialog();//
//设置按钮相关属性m_bttnTest.m_bTransparent = TRUE;m_bttnTest.m_nFlatStyle = CMFCButton::BUTTONSTYLE_NOBORDERS;return TRUE; // return TRUE unless you set the focus to a control
}
直接实现按钮控件的背景透明化。
MFC对话框的透明化---续相关推荐
- BCGControlBar MFC对话框换肤 续
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...
- MFC对话框的透明化
因为这个透明只是为了满足我自己的需求,并不是对广泛意义上的界面优化进行的.所以,先说一下这个透明化需求的具体情况,在一个加载图片做背景的对话框上,附加上非模态的子对话框,但是要保持背景的一致性. 按照 ...
- BCGControlBar MFC对话框换肤
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...
- 使用VC++6.0创建MFC对话框程序
使用VC++6.0创建MFC对话框程序
- MFC对话框中的工具栏、状态栏设计小结
对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...
- CEF:MFC 对话框 Demo(VS2013)
原文链接:https://blog.csdn.net/blackwoodcliff/article/details/74276848 随着 HTML5 的崛起和 IE 的淘汰,微软 Web Brows ...
- 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)
用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...
- MFC对话框动态刷新图片(仿照全屏屏保)
最近做MFC对话框工程 用到全屏刷新图片的功能,由于功能实现比较简单,便使用CImage类配合定时器制作,下面贴上实现方式: 增加消息响应事件: //在对话框属性的消息中 添加WM_PAINT与WM_ ...
- MFC对话框自适应大小(四舍五入)高精度版本
最近写MFC对话框项目需要控件自适应窗口的大小-,使用以前用过的方法经过多次测试发现对话框内的部件"每经过一次拉伸或收缩都会有一定比例的缩小(控件朝左上方向缩小)": 为了解决 ...
最新文章
- RouterOS配置脚本
- JBoss 系列八十一: jBPM 6 中使用 jbpm-console 创建执行 BPM 流程 - II
- 职高计算机专业可以考本科吗,职业高中和普通高中的区别 职业高中能考本科吗...
- 利用Web Services实现软件自动升级
- 小s结尾与大S结尾的汇编语言差异
- sql 合并行内容_SAS高级编程公开课之一SQL
- sql左外连接和右外连接的区别
- linxu 启动过程分析
- Source insight 添加注释插件
- Asp.Net的性能问题
- mysql选择utf 8编码_MySQL支持UTF-8编码全攻略
- vue实现增删改查功能
- 设计模式学习每天一个——Bridge模式
- VSCode运行Java报错No delegateCommandHandler for vscode.java.resolveMainMethod
- SLF4J: Failed toString() invocation on an object of type [com.zhao.guang.xiao.top.po.BlogBean$Hibern
- java开发融云web聊天
- sql注入--宽字节注入
- 使用Python画玫瑰花
- java——Java环境搭建:JDK安装、常用命令
- 华为路由器:ipsec技术
热门文章
- 常用的局域网的网络拓扑有哪些种类?现在最流行的是哪种结构?为什么早期的以太网选择总线拓扑结构而不是星形拓扑结构,但现在却改为使用星形拓扑结构?
- 火狐html显示黑点
- Qt--QVariant
- 医院选址c语言课程设计,通信学院2012届本科毕业设计选题结果(学生)2.xls
- 目前最好的python教程_目和毫米的换算
- 超大Excel文件读写 :使用SXSSFWorkbook和EasyExcel方式对比
- 在线给程序员出主意:花100万买北京户口,值不值?
- 嵌入式存储设备学习笔记
- Golang实现验证码图片OCR
- photoshop cs之菜单栏功能介绍