painting in SDI application
hi experts, I have a problem that is really vaxing me much.I need to
draw a rectangle in a way we draw it in microsoft paint that is by
dragging mouse.My problems are :
1) i get black background and white rectangle. I dont want black
background. but i dont find any way in solving this problem .
2) My previous rectangle gets erased when i try to draw new rectangle.
My code is
class CDerivedWnd : public CWnd
{
public:
bool IsLButtonDown;
bool IsMouseMove;
CPoint pointFirst,pointPrev,pointCurr;
CDC* dcDerivedWnd;
}
void CDerivedWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd::OnLButtonDown(nFlags, point);
IsLButtonDown=true;
pointFirst.x=point.x;
pointFirst.y=point.y;
pointPrev.x=point.x;
pointPrev.y=point.y;
pointCurr.x=point.x;
pointCurr.y=point.y;
}
void CDerivedWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
CWnd::OnLButtonUp(nFlags, point);
if(IsMouseMove)
{
pointCurr.x=point.x;
pointCurr.y=point.y;
IsMouseMove=false;
}
IsLButtonDown=false;
}
void CDerivedWnd::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd::OnMouseMove(nFlags, point);
if(IsLButtonDown)
{
pointPrev.x=pointCurr.x;
pointPrev.y=pointCurr.y;
IsMouseMove=true;
pointCurr.x=point.x;
pointCurr.y=point.y;
}
}
void CDerivedWnd::OnPaint()
{
// new rectangle to be drawn and old rectangle to be erased
CRect RectNew(pointFirst,pointCurr);
CRect RectOld(pointFirst,pointPrev);
// buffer DC
CDC dcMem;
// rectangle structure to get current coordinates
RECT RectStruct;
///Bitmaps of buffer dc and old bitmap
CBitmap BmMem;
CBitmap *pBmOld;
// Cpens
CPen penWhite,penBlack;
CPen *penOld;
//CBrushes
CBrush brushWhite;
CBrush *brushOld;
dcDerivedWnd=this->GetDC();
dcMem.CreateCompatibleDC(dcDerivedWnd);
this->GetClientRect(&RectStruct);
BmMem.CreateCompatibleBitmap(dcDerivedWnd,RectStruct.right-RectStruct.left,RectStruct.bottom-RectStruct.top);
pBmOld=(CBitmap *)dcMem.SelectObject(&BmMem);
penBlack.CreatePen(PS_SOLID,0,RGB(0,0,0));
penWhite.CreatePen(PS_SOLID,0,RGB(255,255,255));
brushWhite.CreateSolidBrush(RGB(255,255,255));
if(IsMouseMove==true && IsLButtonDown==true)
{
penOld=(CPen*)dcMem.SelectObject(&penBlack);
brushOld=(CBrush*) dcMem.SelectObject(&brushWhite);
dcMem.Rectangle(&RectNew);
dcMem.SelectObject(&penWhite);
dcMem.FillRect(&RectOld,&brushWhite);
dcMem.SelectObject(penOld);
dcMem.SelectObject(brushOld);
dcDerivedWnd->BitBlt(0,0,RectStruct.right-RectStruct.left,RectStruct.bottom-RectStruct.top,&dcMem,0,0,SRCCOPY);
}
dcMem.SelectObject(pBmOld);
this->ReleaseDC(dcDerivedWnd);
}
BOOL CDerivedWnd::OnEraseBkgnd(CDC* pDC)
{
return false;
//return CWnd::OnEraseBkgnd(pDC);
}
"PLZ TELL ME WHERE I M MISTAKEN
THANKS"