GDI in Verwendung mit .NET

Cromon

Erfahrenes Mitglied
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:
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:
	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
 
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
 
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 ;).
 
Zurück