|
Wenn eine von TApplication abgeleitete Klasse bereits erzeugt und die ControlBar ebenfalls schon angelegt wurde, ist etwas mehr Aufwand nötig. Der nachfolgende Code zeigt, wie es gemacht werden kann.
void TGrafView::SetupWindow()
{
TWindowView::SetupWindow();
TControlBar* cb = ((mpeedApp*)GetApplication())->
GetControlBar();
TGadget *za = cb->GadgetWithId( CM_EDITUNDO);
cb->Insert(*new TButtonGadget(CM_EDITFIND, CM_EDITFIND),
After, za);
cb->Insert(*new TButtonGadget(CM_EDITFINDNEXT, CM_EDITFINDNEXT),
After, za);
cb->Insert(*new TSeparatorGadget(6), After, za);
cb->LayoutSession();
}
Die Funktion GetControlBar() liefert einen Zeiger auf die vorhandene Controlbar, der schon beim Anlegen der Controlbar initialisiert wurde. Eine Controlbar kann auch alternativ anhand ihrer id ermittelt werden: IDW_TOOLBAR.
Der wesentliche Punkt des Codes ist der Aufruf der Funktion LayoutSession(), die das Gadget letztendlich zum Vorschein bringt.
Die vorgestellte Lösung funktioniert, kann jedoch unter MDI zu Problemen führen. Dies ist darauf zurückzuführen, daß die Buttons jedesmal neu erzeugt und hinzugefügt werden, wenn ein solches Fenster erzeugt wird, was dazu führen kann, daß mehrfach identische Buttons plaziert werden.
Ein Ausweg aus diesem Dilema führt über das Bearbeiten der Nachricht WM_MDIACTIVATE, die in wParam übergibt, ob das Fenster aktiviert oder deaktiviert wird. Mit Hilfe dieser Information können gezielt die jeweils erforderlichen Buttons plaziert und bei der Deaktivierung wieder entfernt werden.
|