Antialiasing, Transparente Farben


  • Mod

    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 ...


  • Mod

    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 !


  • Mod

    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 ...


  • Mod

    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.


Anmelden zum Antworten