Re: painting in SDI application
This is only going to solve the black and white problem (I see other things
that need to be addressed)
put this line before in OnPaint after you create the whiteBrush
dcMem.FillRect(&RectStruct,&brushWhite);
brushWhite.CreateSolidBrush(RGB(255,255,255));
dcMem.FillRect(&RectStruct,&brushWhite);
if(IsMouseMove==true && IsLButtonDown==true)
AliR.
"Arpit" <arpitpmehta@gmail.com> wrote in message
news:1154501530.606161.153550@m73g2000cwd.googlegroups.com...
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,R
ectStruct.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"