对话框背景贴图
【1】 定义一个CBitmap类m_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);
}