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:
Ich intialisiere das dann folgendermassen:
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
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