Antialiasing, Transparente Farben
-
So jetzt habe ich gegoogelt, aber eben nicht alle Treffer. Das Beispiel von
oben lies sich nicht compilieren. Da habe ich bestimmt etwas falsch gemacht. Könnte mir jemand eine kurzes Code-Beispiel schreiben. In einem MFC-CView Fenster möchte ich eine Linie anzeigen die geglättet sein sollte. GDI+
verstehe ich nicht richtig. Offensichtlich ist es eine Klasse, aber in welcher
Sprache gechrieben ? Bei .NET wird es verwandt. Ist es eine Assembly ? Wieso
kann man es dann bei C++ MFC einsetzen ?
-
Folgendes Problem: Wenn ich bei stdafx.h die Anweisung #include <gdiplus.h>
einfüge, wie es in obigen Codebeispiel gezeigt wird, kommt es zu 107
Fehlermeldungen. Die erste: "fehlendes ; vor ... Graphics ..." keine Ahnung,
weiss jemand Rat ?
-
GDI+ ist ganz normaler WinAPI Code (DLL), der gekapselt in eine C++ Klasse ist.
Der Code verträgt sich ohne Probleme mit der MFC. Warum auch nicht?
Schau Dir doch gdiplus.h an!Ich verwende oft genug GDI+, aber wo hast Du gdiplus.h eingefügt?
Ich mache das meisten in der stdafx.h am Ende.Zeig uns Code...
-
Hi,
das einfache Beispiel kann man Kompilieren:
http://www.codeproject.com/Articles/13783/Alpha-Blending-Dialog-Using-GDI
Da geht alles weitere hervor, ich muss nun sagen das Du erst mit den
Standard Konzepten arbeiten musst, damit weiterführende Konzepte einfach handhabbar bleiben.Dafür benötigst Du rund 3 Jahre.
Es gibt aber auch einfachere Programmiere -Oberflächen wie Net C# das sieht fast genauso aus, und du musst nur noch reinspammen was kommen soll.
Auch der FlashPlayer bietet so eine IDE, dito Java und Konsorten, hier mit
MFC und C++ geht erstmal aus dem Stegreif Garnichts.Viel Erfolg
Gruß Karsten
-
Ich habe ein jungfräuliches MFC Projekt angelegt, und bei stdafx.h am Anfang
#include <gdiplus.h> eingefügt. Das ist mein Code ...
-
Ich versuchs noch mal am Ende von stdafx.h ...
-
Am Anfang ist immer schlecht. Vor den Windows Headern bzw. Vor den MFC Headern sollte man höchstens Includes machen, die ein paar Settings/#defines vornehmen.
Alles andere kann sehr komische Effekte haben.
-
Gottseidank es hat geklappt ! Jetzt noch etwas: In OnPaint konnte ich mit GDI+
eine Linie mit SmoothingMode zeichnen. Bei OnDraw nicht ! Folgender Code:... CMeinView::OnDraw(CDC* pDC)
{
Graphics graphics(pDC->m_hDC);
Pen blue(Color(128, 0, 0, 255), 4.0f);
graphics.DrawLine(&blue, 20, 20, 500, 40);
}Es wurde nichts gezeichnet !
-
Und wie sah Dein Paint Code aus. Zwischen OnDraw und OnPaint gibt es "eigentlich" keinen Unterschied. In OnPaint musst Du Dir den Paint DC halt selber besorgen.
-
Er sah so aus:
...OnPaint ...
{
CPaintDC dc(this);
Graphics graphics(dc.m_hDC);
Pen blue(Color(128, 0, 0, 255), 4.0f); // mit Transparenz 128
graphics.SetSmoothingMode(SmoothingModeHighQuality); // Eventuell
graphics.DrawLine(&blue, 200, 200, 500, 500);
}
Das ging ohne Probleme, meiner Meinung genauso geschtieben wie bei OnDraw ...
-
Das ist identisch.
Bitte Code Tags verwenden.
-
Ich gebe es offen zu, ich weiss nicht was Code Tags sind, oder kenne die
Bezeichnung nicht ...
Kürzlich habe ich auf einer VS 2010 Professional, ein neues MFC-Projekt
angelegt, und bei OnDraw die Funktion pDC->TextOut(100, 100, L"MeinText");
eingefügt. Das ging, der Text wurde angezeigt. Als ich die Zeilen, für GDI+
hinzugefügt hatte, wurde OnDraw gar nicht mehr ausgeführt. Nur noch OnPaint.
Nochmals folgender Text, wie er im Beispiel von Code Projekt gezeigt wurde:In stdafx.h am Ende:
#include "gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")In ...App.h...
ULONG_PTR m_gdiplusToken;In ...App.cpp... bei InitInstance, an verschiedenen Stellen ausprobiert !
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);In ...ExitInstance
Gdiplus::GdiplusShutDown(m_gdiplusToken);Und dann OnPaint, bzw OnDraw wie oben ...
Also habe ich auf VS 2008 Standard und VS 2010 Professional das gleiche
Ergebnis erhalten.