/* 118/. How do I draw a bitmap in the background of a dialog ?
* The trick is to override the OnEraseBkgnd handler. Here's one way of doing it: */
CBitmap bitmapBkgnd;
bitmapBkgnd.Attach(LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(m_iBitmapId)));
BOOL CTestbed2Dlg::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dc.SelectObject(&bitmapBkgnd);
int iBitmapWidth, iBitmapHeight ;
int ixOrg, iyOrg;
BITMAP bm;
bitmapBkgnd.GetObject(sizeof(BITMAP), &bm);
iBitmapWidth = bm.bmWidth;
iBitmapHeight = bm.bmHeight;
// If our bitmap is smaller than the background and tiling is
// supported, tile it. Otherwise watch the efficiency - don't
// spend time setting up loops you won't need.
if (iBitmapWidth >= rect.Width() && iBitmapHeight >= rect.Height())
{
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&dc, 0, 0, SRCCOPY);
}
else
{
for (iyOrg = 0; iyOrg < rect.Height(); iyOrg += iBitmapHeight)
{
for (ixOrg = 0; ixOrg < rect.Width(); ixOrg += iBitmapWidth)
{
pDC->BitBlt(ixOrg, iyOrg, rect.Width(), rect.Height(),
&dc, 0, 0, SRCCOPY);
}
}
}
dc.SelectObject(pOldBitmap);
return TRUE;
}
/** If you have static text items and want them to have the bitmap as their
* background, see Tip 117.
*
* Note that the WM_ERASEBKGND message won't appear in ClassWizard by default,
* because ClassWizard hides it from you. To create the handler, you'll have to
* learn how to stop this hiding... which is a useful thing to know anyway. If
* you go to the last right-hand tab (Class Info I think) on ClassWizard, at
* the bottom of the tab you'll see a "filter" combo which is set to "Dialog".
* Change this to "Window" and then go back to the Message Map tab. You'll now
* see a lot more messages to choose from. */