Witam.Pisze sobie w vs2010 programik graficzny,rysuje on linie i prostokat,z tym że dzieje sie to podobnie jak w zwykłym paincie,czyli za pomoca ruchu myszą i wcisnietego lewego przycisku,ale działa we wszystkie strony.Potrzebuje zrobic takie cos zeby w wyniku przytrzymania shifta i ruchu mysza+lpm rysowac kwadrat zamiast protokata.Prostokat dziedziczy po linii.Fragment kodu:
void CMiniPaintView::OnMouseMove(UINT nFlags, CPoint point)
{
//nflags sluzy do ropoznania jaki przycisk myszy zostal wcisniety
// TODO: Add your message handler code here and/or call default
CMiniPaintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if(nFlags &MK_LBUTTON){
CClientDC cDC(this);
cDC.SetROP2(R2_NOTXORPEN); //ustaw raster operation two, jak tlo czarne to xor :)
if(temp){
temp->OnDraw(&cDC); //odrysuje, ale przez xor tak na prawde zmaze
delete temp;
}
if(nFlags &MK_SHIFT){
temp = new CProstokat(pPoczatkowy,point,RGB(255,0,0));
temp->OnDraw(&cDC);
//temp = new CProstokat(pPoczatkowy, point, RGB(255,0,0));
//bezwskaznikowe, tworze lokalnie klase, ktora ma automatycznie dostep do pamieci graficznej
//adres zmiennej odczytuje sie poprzez &
}
else{switch(aktualnaFigura){
case PROSTOKAT:
temp = new CProstokat(pPoczatkowy, point, RGB(255,0,0));
break;
case LINIA:
temp = new CLinia(pPoczatkowy, point, RGB(255,0,0));
break;
default:
temp = new CLinia(pPoczatkowy, point, RGB(255,0,0));}
temp->OnDraw(&cDC);}}
CView::OnMouseMove(nFlags, point);
}
Domyślam się że chodzi o to,aby podczas ruchu myszą x,y w point były skoordynowane:
if(nFlags &MK_SHIFT){
temp = new CProstokat(pPoczatkowy,point,RGB(255,0,0));
Chodzi o point z powyższego kodu.Trzeba go jakoś zmodyfikować.Póki co nie mam pomysłu jak to zrobić.
Dziekuje