Gdiplus in einer dialogbasierten Anwendung
-
Hallo,
ich habe hier mal etwas von GDI+ gehört und bin dann neugierig geworden.
Will das nun in einer dialogbasierten Anwendung von mir anwenden.
Jedoch tauchen da einige Probleme auf.
Zuerst der Quellcode:void CMyDlg::OnPaint() { if(IsIconic()) { .... // Standard } else { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; HDC hdc; PAINTSTRUCT ps; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); hdc = BeginPaint(this, &ps); Graphics graphics(hdc); Pen pen(Color(255, 0, 0, 255)); graphics.DrawLine(&pen, 0, 0, 200, 200); EndPaint(this, &ps); GdiplusShutdown(gdiplusToken); CDialog::OnPaint(); }
Oben in der cpp nutze ich auch
using namespace Gdiplus;
da er sonst undeclared identifier meckert.
Die Gdiplus.lib habe ich auch eingebunden.Es kommt aber die folgende Fehlermeldung:
error C2660: 'CWnd::BeginPaint' : function does not take 2 arguments
error C2660: 'CWnd::EndPaint' : function does not take 2 argumentsUnd zwar erkennt er nicht HDC BeginPaint( HWND hwnd, LPPAINTSTRUCT lpPaint).
Weiss da jemand Rat.Mit der MSDN habe ich mich auch schon rumgeschlagen,
das Beispielprogramm unter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/usingGDIPlus/gettingstarted/drawingaline.asp
läuft, ist aber auch ohne MFC und Dialog.
Wäre für Hilfe oder Ratschläge, aber auch Hinweise sehr dankbar.
Gruß.[EDIT:] Ach ja, mit den this-Zeigern bin ich auch nicht ganz sicher...
-
Ich kenn gdi+ nicht, aber lass doch mal BeginPaint und EndPaint aus der OnPaint komplett weg. Bei einer dialogfeldbasierten Anwendung brauchste das normal nicht
-
GdiplusStartup und GdiplusShutdown in OnPaint ist in etwa so, als ob du dir nach jedem Schritt die Schuhe ausziehst, um sie für den nächsten Schritt wieder anzuziehen. Jeweils einmal, am Anfang und am Ende des Programms sollte reichen.
Es ist auch generell nicht gut, GdiplusShutdown aufzurufen, bevor alle GDI+-Objekte wieder zerstört sind.
-
Ok, werde ich alles mal ausprobieren. Danke. Melde mich dann mit den Ergebnissen.
-
So. Hab es jetzt hinbekommen. Zudem habe ich die Funktionen, GdiplusStartup und GdiplusShutdown, nun in die InitInstance bzw. ExitInstance meiner Dialoganwendung geschrieben. Hilfreich dazu war auch diese Seite:
The Code ProjectDanke für die Hilfe.