WM_ERASEBKGND消息

参考文章:白乔原创:VC之美化界面篇
    Windows在窗口的具体绘制之前,会发送WM_ERASEBKGND消息通知该窗口檫除背景。默认情况下,会以窗口的默认背景色清除窗口。
    消息响应函数为:afx_msg BOOL OnEraseBkgnd(CDC* pDC)。
    以下Demo为对话框加载了一副位图背景。
1、首先导入一副位图。
2、
BOOL CMy123Dlg::OnInitDialog()
{
    ......
    m_bitmap.LoadBitmap(IDB_BITMAP1);
    ......
}
3、
BOOL CMy123Dlg::OnEraseBkgnd(CDC* pDC)
{
    // TODO: Add your message handler code here and/or call default
    CDC dc; 
    dc.CreateCompatibleDC(pDC); 
    dc.SelectObject(&m_bitmap); 
 
    //获取BITMAP对象信息
    BITMAP hb; 
    m_bitmap.GetBitmap(&hb); 
 
    //获取窗口客户区大小 
    CRect rt; 
    GetClientRect(&rt);
 
    //显示位图 
    pDC->StretchBlt(0, 0, rt.Width(), rt.Height(), 
                    &dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY); 

    return TRUE;
}
4、同时得响应OnCtlColor,设置对话框上所有控件画刷为HOLLOW_BRUSH,绘制文字时为TRANSPARENT模式。这样,控件就是透明的。
HBRUSH CMy123Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    //设置透明背景模式
    pDC->SetBkMode(TRANSPARENT);
    //设置背景画刷为空
    return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}

    当然,也可以为控件响应OnEraseBkgnd来加载位图背景。如下图所示:为ListBox控件加载了和对话框一样的位图背景。
    正如上一篇文章WM_CTLCOLOR消息中讲到的,对PushButton控件响应OnEraseBkgnd来加载位图背景,是不起作用的。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值