func (pb *PushButton) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr { switch msg { case win.WM_GETDLGCODE: hwndFocus := win.GetFocus() if hwndFocus == pb.hWnd { form := ancestor(pb) if form == nil { break } dlg, ok := form.(dialogish) if !ok { break } defBtn := dlg.DefaultButton() if defBtn == pb { pb.setAndClearStyleBits(win.BS_DEFPUSHBUTTON, win.BS_PUSHBUTTON) return win.DLGC_BUTTON | win.DLGC_DEFPUSHBUTTON } break } pb.ensureProperDialogDefaultButton(hwndFocus) case win.WM_KILLFOCUS: pb.ensureProperDialogDefaultButton(win.HWND(wParam)) } return pb.Button.WndProc(hwnd, msg, wParam, lParam) }
func (fb *FormBase) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr { switch msg { case win.WM_ACTIVATE: switch win.LOWORD(uint32(wParam)) { case win.WA_ACTIVE, win.WA_CLICKACTIVE: if fb.prevFocusHWnd != 0 { win.SetFocus(fb.prevFocusHWnd) } case win.WA_INACTIVE: fb.prevFocusHWnd = win.GetFocus() } return 0 case win.WM_CLOSE: fb.closeReason = CloseReasonUnknown var canceled bool fb.closingPublisher.Publish(&canceled, fb.closeReason) if !canceled { if fb.owner != nil { fb.owner.SetEnabled(true) if !win.SetWindowPos(fb.owner.Handle(), win.HWND_NOTOPMOST, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE|win.SWP_SHOWWINDOW) { lastError("SetWindowPos") } } fb.close() } return 0 case win.WM_COMMAND: return fb.clientComposite.WndProc(hwnd, msg, wParam, lParam) case win.WM_GETMINMAXINFO: mmi := (*win.MINMAXINFO)(unsafe.Pointer(lParam)) layout := fb.clientComposite.Layout() var min, max Size if layout != nil { min = fb.sizeFromClientSize(layout.MinSize()) max = fb.sizeFromClientSize(layout.MaxSize()) } mmi.PtMinTrackSize = win.POINT{ int32(maxi(min.Width, fb.minSize.Width)), int32(maxi(min.Height, fb.minSize.Height)), } mmi.PtMaxTrackSize = win.POINT{ int32(maxi(max.Width, fb.maxSize.Width)), int32(maxi(max.Height, fb.maxSize.Height)), } return 0 case win.WM_NOTIFY: return fb.clientComposite.WndProc(hwnd, msg, wParam, lParam) case win.WM_SETTEXT: fb.titleChangedPublisher.Publish() case win.WM_SIZE, win.WM_SIZING: fb.clientComposite.SetBounds(fb.window.ClientBounds()) case win.WM_SYSCOMMAND: if wParam == win.SC_CLOSE { fb.closeReason = CloseReasonUser } case taskbarButtonCreatedMsgId: version := win.GetVersion() major := version & 0xFF minor := version & 0xFF00 >> 8 // Check that the OS is Win 7 or later (Win 7 is v6.1). if major > 6 || (major == 6 && minor > 0) { fb.progressIndicator, _ = newTaskbarList3(fb.hWnd) } } return fb.WindowBase.WndProc(hwnd, msg, wParam, lParam) }