#1: Weil Daten an die Dll-Aufrufe übergeben werden müssen - und diese erfordern eine ganz bestimmte Struktur. Ausserdem sind in der Struktur die jeweils aktuellen Werte des Tab beim Empfang der Message gespeichert.
#2: Die Abfragen dienen dazu, dass bei einem bestimmten Typ bzw. einer bestimmten Aktion die Funktion verlassen werden soll. Damit die Windows-übliche Weiterverarbeitung der Message gewährleistet ist, wird dazu "$GUI_RUNDEFMSG" zurückgegeben.
Edit: Übrigens kann man auch einen farbigen Hintergrund simulieren, indem man Child-Windows über das Tab-Ctrl legt, sodass nur die Tab-Reiter hervorgucken. Alle Ctrl werden dann auf den Childs platziert und verwaltet, das Tab-Ctrl dient nur zum Umschalten. Allerdings kann man dann auch gleich die Reiter durch Button ersetzen und spart sich das Tab komplett. ![]()