Tab controls verwenden

By dose | June 1, 2006
Under: technical stuff, Uncategorized

Unter Windows gibt es die Möglichkeit, sogenannte Tab controls zu verwenden. Diese sind zum Beispiel für Eigenschaftsseiten ganz praktisch, um mehrere Optionen übersichtlich darstellen zu können.
Gleich vorweg: Windows bietet hierfür eigene Funktionen für Eigenschaftsseiten an, die verwendet werden können: MSDN – PropertySheets
Allerdings kann es auc hganz interessant sein, so etwas selbst nachzubauen, vor Allem, wenn man eigentlich keine richtigen Eigenschaftsseiten benötigt:
Nachdem das Tab-Control selbst nur Notifications sendet, wenn ein entsprechender Tab angeklickt wird, muss man die Verwaltungs der den Tabs zugehörigen Controls selbst übernehmen. Eine Möglichkeit wäre, alle Controls der jeweiligen Tabs in den Dialog zu geben und von der Nummerierung her so zu wählen, dass immer ein gewisser Bereich an Controls aktiviert, und der Rest beim Wechsel deaktiviert wird. Dies ist jedoch sehr aufwendig zu implementieren und außerdem endet man schnell in einem Kuddelmuddel an Controls.
Einfacher ist es, für jede Tab-Seite einen eigenen Child Dialog zu generieren, der dann entsprechend angezeigt wird.
Ich habe hierzu etwas generischen Code geschrieben, um zu verdeutlichen, wie dies funktioniert:

Zuerst muss das Hauptfenster mit dem Tab Control erstellt werden, welches die anzuzeigenden Subfenster beinhaltet.
Auf diesem wird ein Tab-Control mit der ID IDC_TABS erstellt. Ihm wird die unten gezeigte Window Procedure zugeordnet.
Danach müssen die entsprechenden Client-Fenster erstellt werden, welche die Styles WS_CHILD | WS_EX_CONTROLPARENT gesetzt haben, da sie ja childfenster sind. Im Ressource Editor hierfür einfach die Häkchen Stile / Untergeordnet, Rand / Keine und Erweiterte Formate / Übergeordnete steuern wählen.
Hier nun der code der WndProc für das Tab-Fenster. In das Arrray uDialogs einfach alle Dialoge, die zum Tab gehören eintragen. In pszTitles die zugehörigen Tital, die auf den Tabs erscheinen sollen und in procDialogs kann man schließlich die jeweiligen zugehörigen Window procedures setzen.
Alles unklar? Bei Fragen wie immer einfach comment hinterlassen.

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :