初学mfc编程的小伙伴通常会遇到控件透明制作,小白就来讲一下“基于对话框程序控件透明”的方法:
1、打开类向导(ClassWizard),VC6.0快捷键Ctrl + W, VS2010快捷键Ctrl + Shift + X。
2、重载OnCtlColor,添加如下函数:
if (nCtlColor == CTLCOLOR_STATIC) {
CRect rc; pWnd->GetWindowRect(&rc); ScreenToClient(&rc); CDC* dc = GetDC(); pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY); //把父窗口背景图片先画到按钮上 ReleaseDC(dc); pDC->SetTextColor(RGB(255, 255, 255));//设置字体颜色 pDC->SetBkMode(TRANSPARENT);//设置透明控件 hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH); }
return hbr;
至此,Static控件已经实现透明效果了!
2.在透明的static上改变文字显示时会出现文字重叠现象,需调用函数 Invalidate(true); 即可,但这样是对所有的控件进行刷新,会造成屏幕闪烁现象,最好的办法就是对控件进行局部刷新,这样就可以保证只刷新单一控件,解决不断闪屏的问题:
二、 局部刷新透明控件:
我们需要自己定义一个函数,再 xxxxDlg.h中的 public:下添加自定义函数
void RefreshIndividualControl(UINT uCtlID);
在xxxxDlg.cpp中实现函数: