Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Zeichnen auf ein geladenes Bmp

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.04.2003, 22:48 Uhr
freedom



hallo,

ich habe in ein Dialogfeld ein Static test eingefügt und dann in dieses ein grünes Bitmap geladen. Nun will ich auf diesem BMP mit der Maus Zeichnen.
Wie im Paintbrush.
kann mir jemand sagen wie ich das machen kann.
Da ich Einsteiger bin, bitte bischen genauer erklären.

Projekt daten:

MFC-Anwendung
VC++ 5 oder VC++ .NET

Danke für jede hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.04.2003, 08:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
schau dir mal das Kapitel im VC++ in 21 Tagen an ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: