WM_ERASEBKGND消息

来源:互联网 发布:js body appendchild 编辑:程序博客网 时间:2024/05/22 02:00
参考文章:白乔原创: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来加载位图背景,是不起作用的。
原创粉丝点击