kickerxy123
Erfahrenes Mitglied
Guten Abend,
Dies ist ein Auszug aus einer Klasse. Leider funktioniert der folgende Code (Minimalbeispiel) nicht:
Es ist nur ein Minimalbeispiel (ich weiß, dass WM_PAINT so aussehen sollte: Begin, Bitsplt, End und nichts weiter, aber das ist hier egal). Das Problem liegt ja schon beim: HDC->Pixeldata -> HDC ohne jegliche Modifikationen an den Daten.
Ich würde erwarten, dass dadurch nichts verändert wird. De Facto aber erhalte ich ein schwarzes Bild mit einigen Linien drauf (Linien, die ich in der Tat einzeichne. Diese sind korrekt enthalten. Der Rest außer den Linien (also der Hintergrund) war aber eigentlich weiß mit gestrichelten schwarzen Rasterlinien und nicht komplett schwarz).
Könnt ihr mir auf die schnelle helfen? Ich denke es ist nur eine Kleinigkeit. Ich habe mich noch nie wirklich intensiv mit GDI beschäftigt.
Ich danke vielmals
C++:
void set(HDC hdc)
{
memset(&bmInfo, 0, sizeof(BITMAPINFO));
bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth = GetDeviceCaps(hdc, HORZRES);
bmInfo.bmiHeader.biHeight = GetDeviceCaps(hdc, VERTRES);
bmInfo.bmiHeader.biPlanes = 1;
bmInfo.bmiHeader.biBitCount = 32;
bmInfo.bmiHeader.biCompression = BI_RGB;
HBITMAP m_hBmp = CreateDIBSection(hdc, &bmInfo, DIB_RGB_COLORS, (void**)&pixel, NULL, NULL);
if(!m_hBmp)
{
//failed
}
// ReleaseDC(NULL, hdc);
}
void updateModificationsToHDC(HDC hdc)
{
SetDIBitsToDevice(hdc, 0, 0, bmInfo.bmiHeader.biWidth, bmInfo.bmiHeader.biHeight, 0, 0, 0, bmInfo.bmiHeader.biHeight, pixel, &bmInfo, DIB_RGB_COLORS);
}
private:
BITMAPINFO bmInfo;
BYTE* pixel;
Dies ist ein Auszug aus einer Klasse. Leider funktioniert der folgende Code (Minimalbeispiel) nicht:
C++:
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_PAINT: //Zeichnen beginnt
{
hdc = BeginPaint(hwnd, &ps);
CImage* a = new CImage();
a->set(hdc);
a->updateModificationsToHDC(hdc);
delete a;
EndPaint(hwnd, &ps);
break;
}}return 0;}
Es ist nur ein Minimalbeispiel (ich weiß, dass WM_PAINT so aussehen sollte: Begin, Bitsplt, End und nichts weiter, aber das ist hier egal). Das Problem liegt ja schon beim: HDC->Pixeldata -> HDC ohne jegliche Modifikationen an den Daten.
Ich würde erwarten, dass dadurch nichts verändert wird. De Facto aber erhalte ich ein schwarzes Bild mit einigen Linien drauf (Linien, die ich in der Tat einzeichne. Diese sind korrekt enthalten. Der Rest außer den Linien (also der Hintergrund) war aber eigentlich weiß mit gestrichelten schwarzen Rasterlinien und nicht komplett schwarz).
Könnt ihr mir auf die schnelle helfen? Ich denke es ist nur eine Kleinigkeit. Ich habe mich noch nie wirklich intensiv mit GDI beschäftigt.
Ich danke vielmals
Zuletzt bearbeitet: