初学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中实现函数: