MFC 对话框添加背景图片并且让对话框的子控件背景透明

1.之前在网上看到乱七八糟写给对话框添加背景图片的,然后实现对话框上的子控件透明的例子,很多都行不通,特意把具体实现写到博客上,给有需要的新手或者老手参考下。

VideoSetDlg.h

class CVideoSetDlg : public CDialogEx

{

public:

     HBRUSH OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor);

protected:

//复写初始化对话框函数

        virtual BOOL OnInitDialog();

 private:

         CImage   m_imgBackGround;//背景图片,图片格式为png格式

         CBrush   m_bkBrush;

};

VideoSetDlg.cpp

BEGIN_MESSAGE_MAP(CVideoSetDlg,CDialogEx)

    ON_WM_CTLCOLOR()//需要加上,消息映射

END_MESSAGE_MAP

BOOL CVideoSetDlg::OnInitDialog()

{

    CDialogEx::OnInitDialog();

    CString strPngPath("background.png");

     m_imgBackGround.Load(strPngPath);

    CBitmap bmpTmp;

    bmpTmp.Attach(m_imgBackGround.Detach());

    m_bkBrush.CreatePatternBrush(&bmpTmp);

    //美化对画框外观【圆角对话框】,可不要。

    CRgn rgnTmp;

    RECT rc;

    GetClientRect(&rc);

    rgnTmp.CreateRoundRectRgn(rc.left + 5,rc.top + 5,rc.right - rc.left,rc.bottom - rc.top,5,5);

    SetWindowRgn(rgnTmp,TRUE);

    return TRUE;

}

HBRUSH CVideoSetDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)

{

    HBRUSH hbr = CDialogEx::OnCtlColor(pDC,pWnd,nCtlColor);

    UINT id = pWnd->GetDlgCtrlID();

    if (id == IDC_XXX ){

         pDC->SetBkMode(TRANSPARENT);

         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);

          return (HBRUSH)::GetStockObject(NULL_BRUSH);

     }

    if (this == pWnd){

      return m_bkBrush;

    }

}

2.OnEraseBkgnd格式

//声明

    afx_msg BOOL OnEraseBkgnd(CDC* pDC);

//在消息映射中添加

    ON_WM_ERASEBKGND()

//实现

    BOOL CTest::OnEraseBkgnd(CDC* pDC)

     {

              return TRUE;

     }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值