Re: TransparentBlt troubles...
I would clean this up (as AliR suggested) and simplify it until it works
correctly.
Try this:
BOOL TestView::OnEraseBkgnd(CDC* pDC)
{
return CView::OnEraseBkgnd(pDC);
}
void TestView::OnDraw(CDC* dc)
{
CBitmap foo;
BITMAP bitMapInfo;
foo.LoadBitmap(IDB_EMPTY);
foo.GetBitmap(&bitMapInfo);
CDC dcMem;
dcMem.CreateCompatibleDC(dc);
CBitmap *pOldBm = dcMem.SelectObject(&foo);
::TransparentBlt(*dc, 100, 120, bitMapInfo.bmWidth,
bitMapInfo.bmHeight, dcMem, 0, 0, bitMapInfo.bmWidth,
bitMapInfo.bmHeight, RGB (0, 128, 128));
dcMem.SelectObject(pOldBm);
}
"hamishd" <Hamish.Dean@gmail.com> wrote in message
news:1194636595.694396.113610@z9g2000hsf.googlegroups.com...
The docs say link to Msimg32.lib ... I've personally never had to do this
explicitly in a project in Visual Studio but it mught be worth a shot.
That fixed it, but I'm still having problems. The bitmap only flashes
up for a split second (or when i'm resizing it flashes). How do I keep
it on the page?
BOOL TestView::OnEraseBkgnd(CDC* pDC)
{
return FALSE;//CView::OnEraseBkgnd(pDC);
}
void TestView::OnDraw(CDC* dc)
{
TestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dcMem;
dcMem.CreateCompatibleDC(dc);
HDC hMemDC = CreateCompatibleDC(dcMem);
dc->SetBkColor(RGB(120,120,120));
CMemDC pDC(dc);
CRect rect;
GetClientRect(rect);
int B = 10;
int W = __min(rect.Width(), rect.Height());
W = (W - 2*B)/16;
CBitmap foo;
BITMAP bitMapInfo;
foo.LoadBitmap(IDB_EMPTY);
foo.GetBitmap(&bitMapInfo);
dcMem.SelectObject(foo);
TransparentBlt(dc->m_hDC, 100, 120, bitMapInfo.bmWidth,
bitMapInfo.bmHeight, dcMem.m_hDC, 0, 0, bitMapInfo.bmWidth,
bitMapInfo.bmHeight, RGB (0, 128, 128));
}