Re: CDC does not Work Properly
"Matrixinline" <anup.kataria@gmail.com> wrote in message
news:bafbdaa4-d22a-44ee-b29b-5937952cc07d@q21g2000hsa.googlegroups.com...
In a Dialog based application I have OnPaint method like this
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CDC *pDC = GetDC();
CDC oTempDC;
oTempDC.CreateCompatibleDC(m_pProcDC);
oTempDC.BitBlt (0, 0, screenMaxX, screenMaxY, m_pProcDC, 0, 0,
SRCCOPY );
// m_pProcDC is CDC and contains a Bitmap as selected object
oTempDC.DrawIcon(oRect.left, oRect.top, m_hIcon);
// Loaded ICON from resource m_hIcon
pDC->BitBlt(0, 0, screenMaxX, screenMaxY,&oTempDC, 0, 0, SRCCOPY);
ReleaseDC(pDC);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
it diaplays Nothing!! id displays only the background color of dialog
nothing else.
If I replace the code
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CDC *pDC = GetDC();
// m_pProcDC is CDC and contains a Bitmap as selected
object
pDC->BitBlt(0, 0, screenMaxX, screenMaxY,m_pProcDC, 0, 0, SRCCOPY);
ReleaseDC(pDC);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
it works!!
Can you please let me know why it is displaying anything?
First, in OnPaint(), you aren't supposed to use GetDC()/ReleaseDC(). You're
supposed to use CPaintDC instead (when you add the OnPaint() handler, the
handler should have this code in it already):
void CMyDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
...
}
Make sure coordinates are correct for BitBlt(). Unfortunately, seeing
what's in the mem DC is hard... someone should make Intellisense for DC's!
;)
-- David