Die bekannten Toolbars haben unserer im Moment nur noch zwei Dinge voraus: zum einen fehlen bei uns die Tooltipps, die beim Platzieren des Mauszeigers auf einem Button erscheinen, und zum anderen müssen wir noch unser Menü erzeugen, das beim dritten Button (im Dropdown-Stil) angezeigt werden soll.
Dazu nutzen wir die Nachricht "WM_NOTIFY". Diese Nachricht wird von einem Control an das übergeordnete Fenster gesendet, sobald irgendein Ereignis eingetreten ist. Als Benachrichtigungscodes interessieren uns hier "TTN_NEEDTEXT" für die Tooltipps:
case PNMToolBar(lParam)^.hdr.code of
TTN_NEEDTEXT:
case PToolTipText(lParam).hdr.idFrom of
IDC_BUTTON1: PToolTipText(lParam).lpszText := 'ToolbarButton 1';
IDC_BUTTON2: PToolTipText(lParam).lpszText := 'ToolbarButton 2';
IDC_BUTTON3: PToolTipText(lParam).lpszText := 'ToolbarButton 1';
end;
end;
und "TBN_DROPDOWN" für das Menü, wobei wir die Position des Buttons direkt mit Hilfe des lParam ermitteln. Das bietet den Vorteil, dass wir die Buttons beliebig neu anordnen können. Das Menü erscheint dann trotzdem unter dem richtigen:
case PNMToolBar(lParam)^.hdr.code of
TBN_DROPDOWN:
begin
{ wo ist der 3. Button }
SendMessage(hToolbar,TB_GETRECT,PNMToolBar(lParam)^.iItem,LPARAM(@Rect));
pt.x := Rect.Left;
pt.y := Rect.Bottom + 2;
ClientToScreen(hWnd, pt);
{ Popupmenü erzeugen, s. Menü-Tutorial }
end;