C
spacehelix schrieb:
Hi,
ich hab das so ausprobiert wie du es hier vorschlägst. Die Funktion DeleteObjekt(hBr); liefert dann aber NULL zurück und mit GetLastError erscheint der Fehler mit der Nummer 6 (The handle is invalid.).
Probiers mal aus.
if (DeleteObject==NULL)
DWORD errorNr=GetLastError();
Gruß spacehelix
Was soll denn bitte DeleteObject==NULL bewirken =?
Du kannst doch nicht die Funktionsadresse mit NULL vergleichen (ok man kanns schon aber was soll das ?)
MSDN zu DeleteObject(...) schrieb:
If the function succeeds, the return value is nonzero.
If the specified handle is not valid or is currently selected into a device context, the return value is zero.
Außerdem:
Prototyp der Funktion DeleteObject schrieb:
BOOL DeleteObject(
HGDIOBJ hObject // handle to graphic object
);
So kannst du, wenn es dir wichtig ist, auf Fehler prüfen:
void Draw(HWND hWnd)
{
HDC hDC = GetDC(hWnd);
HBRUSH hBr = CreateSolidBrush(RGB(0,0,0));
RECT r;
// Ein rechteck zeichnen
r.left = 100;
r.right = 10;
r.top = 100;
r.bottom = 10;
FillRect(hDC, &r, hBr);
// noch ein Rechteck in einer anderen Farbe zeichnen
if(!DeleteObject(hBr))
MessageBox(0,0,0,0);
hBr = CreateSolidBrush(RGB(100,100,100));
r.left = 100;
r.right = 200;
r.top = 100;
r.bottom = 200;
FillRect(hDC, &r, hBr);
ReleaseDC(hWnd, hDC);
if(!DeleteObject(hBr))
MessageBox(0,0,0,0);
}
PS_1: Hab die Funktion (->Parameterliste) nur deshalb modifiziert, da ich es dann besser testen konnte.
PS_2: NULL ist in C++ zwar als 0 definiert, und BOOL als int (Win32), somit wäre ne implizite Typenumwandlung nat. möglich, allerdings würde ich NULL nur in Verbindung mit Zeigern verwenden.