"Vererbung" innerhalb der Handles
-
Hier wird erklärt, wie die Handles in der WinAPI definiert sind. Und so wie es da steht, sind alle Handles nur ein typedef auf den eigentlichen Typ HANDLE:
typedef HANDLE HWND; typedef HANDLE HGDIOBJ; typedef HANDLE HBITMAP;
Wie aber kommt es, dass innerhalb der Handles trotzdem eine Art "Vererbungsstruktur" gewahrt wird?
Zum Beispiel kann ich nicht nur das schreiben:
HBITMAP h = CreateBitmap(1, 1, 1, 1, NULL);
sondern auch das:
HGDIOBJ h = CreateBitmap(1, 1, 1, 1, NULL);
und das:
HANDLE h = CreateBitmap(1, 1, 1, 1, NULL);
Aber sobald ich versuche, das hier zu schreiben:
HWND h = CreateBitmap(1, 1, 1, 1, NULL);
kommt der Compilerfehler, dass HBITMAP nicht in HWND umgewandelt werden kann.
Wie wird das realisiert, dass der Typ HBITMAP als eine Art abgeleiteter Typ von HGDIOBJ angesehen wird, welcher wiederum von HANDLE ableitet, während HWND eigenständig von HANDLE ableitet und somit nicht mit HBITMAP ersetzbar ist?
-
Nein! Es sind eben nicht alles typedefs auf HANDLE.
Es werden für HWND und HGDIOBJ IMHO unterschieldiche Zeiger auf unamed structures erzeugt. Damit kan man diese nicht mehr austauschen. HGDIOBJ HBITMAP etc sind jedoch identisch.