tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
403
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Hallo zusammen!

    Ich versuche momentan gerade einige Funktionen aus der GDI in einer .NET-Umgebung bereitzustellen. Das geschieht über eine DLL, die eine Schnittstelle zum unverwalteten Code zur Verfügung stellt. Das Problem ist allerdings, dass sich die Funktionen hier plötzlich ganz anders verhalten als mit einem unverwaltet erstellten Fenster.

    Das ist der unverwaltete Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    UGDIHandler::UGDIHandler(HWND hWindow)
    {
        m_hWindow = hWindow;
    }
     
    void UGDIHandler::BeginScene()
    {
        WINDOWINFO inf;
        GetWindowInfo(m_hWindow, &inf);
        m_baseDC = GetDC(m_hWindow);
        m_compDC = CreateCompatibleDC(m_baseDC);
        m_compBitmap = CreateCompatibleBitmap(m_baseDC, inf.rcClient.right - inf.rcClient.left,
            inf.rcClient.bottom - inf.rcClient.top);
        m_hbmOld = (HBITMAP)SelectObject(m_compDC, m_compBitmap);
    }
     
    void UGDIHandler::EndScene()
    {
        SelectObject(m_compDC, m_hbmOld);
        DeleteObject(m_compBitmap);
        m_compBitmap = 0;
        DeleteDC(m_compDC);
        m_compDC = 0;
    }
     
    void UGDIHandler::Present()
    {
        WINDOWINFO inf;
        GetWindowInfo(m_hWindow, &inf);
        BitBlt(m_baseDC, 0, 0, inf.rcClient.right - inf.rcClient.left, inf.rcClient.bottom - inf.rcClient.top,
            m_compDC, 0, 0, SRCCOPY);
        ReleaseDC(m_hWindow, m_baseDC);
    }

    Ich intialisiere das dann folgendermassen:
    Code :
    1
    2
    3
    4
    
        GDIHandler::GDIHandler(System::Windows::Forms::Control^ renderTarget)
        {
            m_pGDI = new UGDIHandler((HWND)renderTarget->Handle.ToPointer());
        }

    Das Resultat ist allerdings nicht sehr erfreulich da das Fenster unabhängig jeglicher Zeichenaktionen auf m_compDC immer schwarz bleibt. Der exact gleiche Code mit einem unverwalteten Fenster klappt einwandfrei. Ich habe geprüft, dass alle HDC nicht 0 sind, dass das Bitmap nicht monochrom ist und BitBlt gibt auch nicht FALSE zurück und die Grössen des Bitmaps stimmen soweit auch.

    Hat jemand eine Ahnung, woran das liegen könnte?

    Gruss
    Cromon
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    woher das unterschiedliche Verhalten kommt, kann ich dir leider nicht sagen.

    Ich wollte nur anmerken, dass ich keinen Sinn darin sehe, GDI-Funktionalität über eine unmanaged DLL in einer .NET-Umgebung bereitzustellen. Über die Graphics-Klasse ist ein wesentlich komfortableres Arbeiten mit GDI bzw. GDI+ möglich.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Es handelt sich dabei um eine Anleitung für die Verbindung zwishen .NET und unverwaltetem Code. Und weil ich das mit der GDI grad im unverwalteten Code hatte hab ich mir das ausgesucht als Beispiel .
     

Ähnliche Themen

  1. Verwendung Attach
    Von NIL92 im Forum 3D Studio Max
    Antworten: 1
    Letzter Beitrag: 16.05.09, 14:22
  2. Verwendung von ShellExecuteEx
    Von Euler im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 08.04.08, 17:14
  3. Verwendung von templates
    Von MissPiggy im Forum PHP
    Antworten: 4
    Letzter Beitrag: 11.07.05, 00:03
  4. Script-Verwendung
    Von blindfold im Forum Photoshop
    Antworten: 0
    Letzter Beitrag: 03.06.05, 14:07
  5. Verwendung von @?
    Von 47xxyy im Forum .NET Archiv
    Antworten: 5
    Letzter Beitrag: 14.12.04, 19:38