GdiPlus und *pDC
-
Hallo,
ich arbeite mich gerade in Gdi+ ein und verwende die MFC. Offenbar habe ich aber ein Verständnisproblem bei Graphics. Man muß Graphics ja mit einem DC initialisieren. Da ich über die Funktion OnDraw() arbeite, habe ich einen Pointer, der auf den DC zeigt. Leider ist es mir nicht gelungen, den dahinter sich verbergenden DC an Graphics zu übergeben. Immer wieder meckert der Compiler, dass er *pDC oder **pDC nicht in HDC konvertieren kann. Ich helfe mir im Moment damit, dass ich mir einen CClientDC besorge.CClientDC dc=CClientDC(this); Graphics gdiGraphic(dc);
Es klappt auch nicht, CClientDC(this) in Graphics aufzurufen.
Mit dem obigen Code klappt es. Geht es aber auch eleganter?Mfg
wilfried
-
Das DC Handle stekt in der Klasse.
Wie wäre es mit einemBlick in die Doku?
http://msdn.microsoft.com/de-de/library/fxhhde73(v=VS.80).aspxDa steht alles wunderbar erklärt.
CClientDC dc(this); Graphics gdiGraphic(dc.m_hDC);
BTW: Du solltest immer nur in OnPaint zeichnen lassen und den CPaintDC verwenden.
-
Hallo, Martin,
danke für die Antwort, manchmal braucht's halt einen Denkanstoß.
Zu OnPaint(): Diese Funktion wird mir in CView gar nicht angeboten, sondern wohl in den Tiefen von OnDraw() aufgerufen.
Mfg
Wilfried
-
Wenn Du in OnDraw mit dem pDC arbeitest, dann ist dies ein CPaintDC.
Ich bin nur stutzig geworden, weil Du direkt einen CClientDC holst und das wäre definitiv falsch.
-
Hallo, Martin,
ja,klar.
Nur hatte ich eben das Problem, dass ich nicht wußte, wie ich aus dem *pDC den HDC kriege. Deshalb hab ich mir eben den CClientDC besorgt - und damit hat gdi+ auch gezeichnet. Nach deinem Hinweis war natürlich klar, wo der HDC steckt :).
Und dann brauch ich auch den CClientDC nicht mehr.
Alles in allem - du hast mir sehr geholfen und ich hab was gelernt.Danke
Wilfried