Static、Edit、Check Box、Radio等常用控件透明的方法
来源:互联网 发布:红警2 for mac 10.12 编辑:程序博客网 时间:2024/05/23 01:17
原理:在对话框的OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)函数里将父窗口的背景绘制到控件上。
网上流传的代码,对于Check Box\Raido的文字部分会有重影。
而我经过调试,将双缓冲绘图机制用到这里,完美解决了Check Box\Raido的文字部分会有重影的问题,且支持大多数的常用控件。
废话少说,直接上主要代码。
HBRUSH CMFCTransparentCtrlsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 UINT id = pWnd->GetDlgCtrlID(); CString strDebug; strDebug.Format(_T("CMFCTransparentCtrlsDlg::OnCtlColor ctrl id = %d\n"), id); OutputDebugString(strDebug); switch (id) { case IDC_STATIC1: //case IDC_STATIC2: case IDC_EDIT1: //case IDC_EDIT2: case IDC_COMBO1: // Combo Box 会显示不正常 //case IDC_COMBO2: // 调试时发现默认就有了透明的效果,且选择item时不正常 // 研究发现,鼠标移到Combo Box时, 会有多个id触发,默认的有1000,1001 // 当有设置透明的id等于1000,1001,将导致Combo Box显示不正常 // 而之前IDC_STATIC1=1000,IDC_BUTTON1=1001 case IDC_STATIC_GROUP1: //case IDC_STATIC_GROUP2: case IDC_RADIO1: //case IDC_RADIO2: case IDC_CHECK1: //case IDC_CHECK2: case IDC_SLIDER1: //case IDC_SLIDER2: case IDC_LIST1: // List 会显示不正常 //case IDC_LIST2: case IDC_BUTTON1: //case IDC_BUTTON2: case IDC_SPIN1: //case IDC_SPIN2: // 没什么变化 case IDC_DATETIMEPICKER1: // 没什么变化 case IDC_PROGRESS1: // 没什么变化 { OutputDebugString(_T("******CMFCTransparentCtrlsDlg::OnCtlColor in switch******\n")); pDC->SetBkMode(TRANSPARENT); CRect rc; pWnd->GetWindowRect(&rc); ScreenToClient(&rc); CDC* dc = GetDC(); //双缓冲机制 if (m_bIsFirstRun) { CRect rcParent; GetClientRect(&rcParent); CDC *pParentDC = GetDC(); CBitmap mBitmap; mBitmap.CreateCompatibleBitmap(pDC, rcParent.Width(),rcParent.Height()); m_parentMemDC.CreateCompatibleDC(pDC); CBitmap *pOldBitmap = m_parentMemDC.SelectObject(&mBitmap); m_parentMemDC.BitBlt(0,0,rcParent.Width(),rcParent.Height(),pParentDC,0,0,SRCCOPY); ReleaseDC(pParentDC); mBitmap.DeleteObject(); m_bIsFirstRun = FALSE; } pDC->BitBlt(0,0,rc.Width(),rc.Height(),&m_parentMemDC,rc.left,rc.top,SRCCOPY); //双缓冲机制 //通用方法会导致重影问题 //pDC->BitBlt(0,0,rc.Width(),rc.Height(),dc,rc.left,rc.top,SRCCOPY); //把父窗口背景图片先画到按钮上 ReleaseDC(dc); hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH); } break; default: break; } // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr;}
源码下载地址:http://download.csdn.net/detail/lwweisen/6225045
转载请注明出处:http://blog.csdn.net/lwweisen/article/details/11253715
- Static、Edit、Check Box、Radio等常用控件透明的方法
- MFC对话框中改变对话框,Group Box, Static Text, Check Box, Edit Ctrl(disabled), Combo Box(disabled), Radio Button等控件背景色
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address)
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
- MFC中控件的使用-------Check Box、Edit Control
- MFC透明BUTTON、EDIT、STATIC控件
- MFC透明BUTTON、EDIT、STATIC控件
- Check Box&Radio Button
- Edit Box控件的属性
- VS2010/MFC编程入门之二十一(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2010/MFC编程入门之二十一(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2013/MFC编程入门之二十一(常用控件:按钮控件Button、Radio Button和Check Box)
- C++ MFC / VS2013 之二十(常用控件:按钮控件Button、Radio Button和Check Box)
- MFC控件使用01-------Check Box/Edit Control
- hiberanate 对象复制
- 如何避开网络跟踪和隐藏网络痕迹
- 读写信号量(2.6.23内核,i386)
- 内存文件系统使用及示例:ramdisk, ramfs, tmpfs
- 计算机专业研究生的读研规划思考------转载
- Static、Edit、Check Box、Radio等常用控件透明的方法
- 越镜prism-break
- CHibernateUtil 获取数据
- 班级互评代码
- Code Read [statusbar]
- oracle 取第一条数据
- maven pom.xml加载不同properties配置
- APP被苹果App Store拒绝的79个原因(未完待续)
- ImagerView scaleType属性