func (tb *ToolBar) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr { switch msg { case win.WM_COMMAND: switch win.HIWORD(uint32(wParam)) { case win.BN_CLICKED: actionId := uint16(win.LOWORD(uint32(wParam))) if action, ok := actionsById[actionId]; ok { action.raiseTriggered() return 0 } } case win.WM_NOTIFY: nmhdr := (*win.NMHDR)(unsafe.Pointer(lParam)) switch int32(nmhdr.Code) { case win.TBN_DROPDOWN: nmtb := (*win.NMTOOLBAR)(unsafe.Pointer(lParam)) actionId := uint16(nmtb.IItem) if action := actionsById[actionId]; action != nil { var r win.RECT if 0 == tb.SendMessage(win.TB_GETRECT, uintptr(actionId), uintptr(unsafe.Pointer(&r))) { break } p := win.POINT{r.Left, r.Bottom} if !win.ClientToScreen(tb.hWnd, &p) { break } win.TrackPopupMenuEx( action.menu.hMenu, win.TPM_NOANIMATION, p.X, p.Y, tb.hWnd, nil) return win.TBDDRET_DEFAULT } } } return tb.WidgetBase.WndProc(hwnd, msg, wParam, lParam) }
func (sb *SplitButton) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr { switch msg { case win.WM_NOTIFY: switch ((*win.NMHDR)(unsafe.Pointer(lParam))).Code { case win.BCN_DROPDOWN: dd := (*win.NMBCDROPDOWN)(unsafe.Pointer(lParam)) p := win.POINT{dd.RcButton.Left, dd.RcButton.Bottom} win.ClientToScreen(sb.hWnd, &p) win.TrackPopupMenuEx( sb.menu.hMenu, win.TPM_NOANIMATION, p.X, p.Y, sb.hWnd, nil) return 0 } } return sb.Button.WndProc(hwnd, msg, wParam, lParam) }