001
14.04.2003, 01:12 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft... (Operator)
|
Hi, da ich anfänger bin und das ganze auch noch nicht probiert habe kann ich dir nicht sagen ob mein lösungsvorschlag funktioniert, aber ich würde da so rangehen.
Nehmen wir mal an du willst eine Line zeichen von Punkt1 zu Punkt2.
Zum malen bietet es sich z.B. an, die Nachricht WM_LBUTTONDOWN abzufangen.
Wenn der Button das erstemal geklickt wird fängt die Linie an, beim zweite mal hört die Linie auf.
Hierfür musst du abchecken, ob und wo innerhalb deiner Malfläche geklickt wurde.
C++: |
CRect rechteck; CRgn ZeichenflaecheRgn; CPoint firstKlick;
(GetDlgItem(IDC_ZEICHENFLAECHE))->GetWindowRect(&rechteck); this->ScreenToClient(&rechteck);
ZeichenflaecheRgn.CreateRectRgn(rechteck.TopLeft().x, rechteck.TopLeft().y, rechteck.BottomRight().x, rechteck.BottomRight().y);
if(ZeichenflaecheRgn.PtInRegion(point)){ /*wenn innerhalb der zeichenregion geklickt wurde */ if(klickflag==0){/*hier checken ob das erste oder das zweite mal geklickt wurde*/ klickflag=1; firstKlick=point-rechteck.TopLeft();
}else{ klickflag=0; CWnd *Pic = GetDlgItem(IDC_POSITIONWINDOW); CDC *pDC = Pic->GetDC(); pDC->MoveTo( firstKlick); /*hier kannst du noch vorher linenfarbe und dicke einstellen, wenn du es nich macht werden defaultwerte genommen*/ pDC->LineTo( point- rechteck.TopLeft() );
Pic->ReleaseDC(pDC);
} }
|
Wie gesagt, ich habe das ganze auch noch nie gemacht und der Quellcode ist auch nicht getestet aber ich denke so in der art müsste das gehen. Wenn du willst, dass die ganze zeit die linie gemalt wird, bis der user sich endlich mal entscheidt, wo der zweite punkt der Linie ist, dann solltest du hierfür die Nachricht WM_MOUSEMOVE verwenden. Wird dann allerdings ein wenig koplizierter weil du ja ständig neumalen musst und noch einiges mehr beachten musst.
Du solltest dir dir CDC und die CPaintDC-Klassen mal anschauen da sind jede Menge Methoden zum bunten malen von linien, rechtecken und bögen enthalten.
hoffe das hilft dir -- ...fleißig wie zwei Weißbrote Dieser Post wurde am 14.04.2003 um 01:13 Uhr von Heiko editiert. |