要试MFC控件背景透明,需要重写消息WM_CTLCOLOR的处理函数OnCtlColor(CDC*,CWnd,UINT)。
框架使用该函数绘制每一个控件。
// 指示正在绘制窗口。 HBRUSH CMFCApplicationSDIView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CView::OnCtlColor(pDC, pWnd, nCtlColor); // 将ID为4562的控件的背景色设置为透明 if (pWnd->GetDlgCtrlID() == 4562) { pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH)GetStockObject(NULL_BRUSH); } return hbr; }
当该函数绘制控件时,通过改变DC的属性,来达到透明的效果。注意这里返回一个空的画刷。