一开始以为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对话框的透明化---续相关推荐

  1. BCGControlBar MFC对话框换肤 续

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  2. MFC对话框的透明化

    因为这个透明只是为了满足我自己的需求,并不是对广泛意义上的界面优化进行的.所以,先说一下这个透明化需求的具体情况,在一个加载图片做背景的对话框上,附加上非模态的子对话框,但是要保持背景的一致性. 按照 ...

  3. BCGControlBar MFC对话框换肤

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  4. 使用VC++6.0创建MFC对话框程序

    使用VC++6.0创建MFC对话框程序

  5. MFC对话框中的工具栏、状态栏设计小结

    对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...

  6. CEF:MFC 对话框 Demo(VS2013)

    原文链接:https://blog.csdn.net/blackwoodcliff/article/details/74276848 随着 HTML5 的崛起和 IE 的淘汰,微软 Web Brows ...

  7. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  8. MFC对话框动态刷新图片(仿照全屏屏保)

    最近做MFC对话框工程 用到全屏刷新图片的功能,由于功能实现比较简单,便使用CImage类配合定时器制作,下面贴上实现方式: 增加消息响应事件: //在对话框属性的消息中 添加WM_PAINT与WM_ ...

  9. MFC对话框自适应大小(四舍五入)高精度版本

    最近写MFC对话框项目需要控件自适应窗口的大小-,使用以前用过的方法经过多次测试发现对话框内的部件"每经过一次拉伸或收缩都会有一定比例的缩小(控件朝左上方向缩小)":   为了解决 ...

最新文章

  1. RouterOS配置脚本
  2. JBoss 系列八十一: jBPM 6 中使用 jbpm-console 创建执行 BPM 流程 - II
  3. 职高计算机专业可以考本科吗,职业高中和普通高中的区别 职业高中能考本科吗...
  4. 利用Web Services实现软件自动升级
  5. 小s结尾与大S结尾的汇编语言差异
  6. sql 合并行内容_SAS高级编程公开课之一SQL
  7. sql左外连接和右外连接的区别
  8. linxu 启动过程分析
  9. Source insight 添加注释插件
  10. Asp.Net的性能问题
  11. mysql选择utf 8编码_MySQL支持UTF-8编码全攻略
  12. vue实现增删改查功能
  13. 设计模式学习每天一个——Bridge模式
  14. VSCode运行Java报错No delegateCommandHandler for vscode.java.resolveMainMethod
  15. SLF4J: Failed toString() invocation on an object of type [com.zhao.guang.xiao.top.po.BlogBean$Hibern
  16. java开发融云web聊天
  17. sql注入--宽字节注入
  18. 使用Python画玫瑰花
  19. java——Java环境搭建:JDK安装、常用命令
  20. 华为路由器:ipsec技术

热门文章

  1. 常用的局域网的网络拓扑有哪些种类?现在最流行的是哪种结构?为什么早期的以太网选择总线拓扑结构而不是星形拓扑结构,但现在却改为使用星形拓扑结构?
  2. 火狐html显示黑点
  3. Qt--QVariant
  4. 医院选址c语言课程设计,通信学院2012届本科毕业设计选题结果(学生)2.xls
  5. 目前最好的python教程_目和毫米的换算
  6. 超大Excel文件读写 :使用SXSSFWorkbook和EasyExcel方式对比
  7. 在线给程序员出主意:花100万买北京户口,值不值?
  8. 嵌入式存储设备学习笔记
  9. Golang实现验证码图片OCR
  10. photoshop cs之菜单栏功能介绍