MFC控件背景透明

发布时间 2023-04-27 09:46:35作者: 饼干`

要试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的属性,来达到透明的效果。注意这里返回一个空的画刷。