MFC对话框背景贴图

 

来自:http://hi.baidu.com/superkdc/blog/item/19641aa0c37d2b83471064be.html

 

对话框背景贴图

1】 定义一个CBitmapm_Bitmap。并在OnInitDialog()LoadBitmap();

    m_Bitmap.LoadBitmap(IDB_BITMAP_BACKGROUND);

2】 在建立类向导的class info中选择Windows即可找到消息响应函数,函数在OnEraseBkgnd(CDC* pDC)消息中处理背景刷新问题。Onpain()级别较低,会出现相应不及时的问题。

BOOL CLiteFindDlg::OnEraseBkgnd(CDC* pDC)
{
    CDialog::OnEraseBkgnd(pDC);   

    if(!m_Bitmap.m_hObject)
        return true;

    CRect rect;
    GetClientRect(&rect);
    CDC dc;
    dc.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = dc.SelectObject(&m_Bitmap);
    int bmw, bmh ;
    BITMAP bmap;
    m_Bitmap.GetBitmap(&bmap);
    bmw = bmap.bmWidth;
    bmh = bmap.bmHeight;
    int xo=0, yo=0;

    ////////此处贴图采用拉伸strentch//////////
    pDC->StretchBlt(xo, yo, rect.Width(),rect.Height(), &dc,
            0, 0,bmw,bmh, SRCCOPY);

    /////////////////////////////////////////

    dc.SelectObject(pOldBitmap);
    return true;

   }

3】贴图有平铺(Tile)、居中(center)、拉伸(strentch)三种。有不同的处理方法。

if(m_style == StyleTile)
{
    for (yo = 0; yo < rect.Height(); yo += bmh)
    {
        for (xo = 0; xo < rect.Width(); xo += bmw)
        {
            pDC->BitBlt (xo, yo, rect.Width(),
                rect.Height(), &dc,
                0, 0, SRCCOPY);
        }
    }

}

if(m_style == StyleCenter)
{
    if(bmw < rect.Width())
        xo = (rect.Width() - bmw)/2;
    else 
        xo=0;
    if(bmh < rect.Height())
        yo = (rect.Height()-bmh)/2;
    else
        yo=0;
    pDC->BitBlt (xo, yo, rect.Width(),
        rect.Height(), &dc,
        0, 0, SRCCOPY);
}

if(m_style == StyleStretch)
{
    pDC->StretchBlt(xo, yo, rect.Width(),
        rect.Height(), &dc,
        0, 0,bmw,bmh, SRCCOPY);
}

你可能感兴趣的:(职场,mfc,休闲)