func (mw *MainWindow) SetFullscreen(fullscreen bool) error { if fullscreen == mw.Fullscreen() { return nil } if fullscreen { var mi win.MONITORINFO mi.CbSize = uint32(unsafe.Sizeof(mi)) if mw.windowPlacement == nil { mw.windowPlacement = new(win.WINDOWPLACEMENT) } if !win.GetWindowPlacement(mw.hWnd, mw.windowPlacement) { return lastError("GetWindowPlacement") } if !win.GetMonitorInfo(win.MonitorFromWindow( mw.hWnd, win.MONITOR_DEFAULTTOPRIMARY), &mi) { return newError("GetMonitorInfo") } if err := mw.ensureStyleBits(win.WS_OVERLAPPEDWINDOW, false); err != nil { return err } if r := mi.RcMonitor; !win.SetWindowPos( mw.hWnd, win.HWND_TOP, r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top, win.SWP_FRAMECHANGED|win.SWP_NOOWNERZORDER) { return lastError("SetWindowPos") } } else { if err := mw.ensureStyleBits(win.WS_OVERLAPPEDWINDOW, true); err != nil { return err } if !win.SetWindowPlacement(mw.hWnd, mw.windowPlacement) { return lastError("SetWindowPlacement") } if !win.SetWindowPos(mw.hWnd, 0, 0, 0, 0, 0, win.SWP_FRAMECHANGED|win.SWP_NOMOVE| win.SWP_NOOWNERZORDER|win.SWP_NOSIZE|win.SWP_NOZORDER) { return lastError("SetWindowPos") } } return nil }
// BringToTop moves the *WindowBase to the top of the keyboard focus order. func (wb *WindowBase) BringToTop() error { if !win.SetWindowPos(wb.hWnd, win.HWND_TOP, 0, 0, 0, 0, win.SWP_NOACTIVATE|win.SWP_NOMOVE|win.SWP_NOSIZE) { return lastError("SetWindowPos") } return nil }
func NewToolTip() (*ToolTip, error) { tt := new(ToolTip) if err := InitWindow( tt, nil, "tooltips_class32", win.WS_POPUP|win.TTS_ALWAYSTIP, win.WS_EX_TOPMOST); err != nil { return nil, err } succeeded := false defer func() { if !succeeded { tt.Dispose() } }() win.SetWindowPos(tt.hWnd, win.HWND_TOPMOST, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE|win.SWP_NOACTIVATE) succeeded = true return tt, nil }
// SetParent sets the parent of the WidgetBase and adds the WidgetBase to the // Children list of the Container. func (wb *WidgetBase) SetParent(parent Container) (err error) { if parent == wb.parent { return nil } style := uint32(win.GetWindowLong(wb.hWnd, win.GWL_STYLE)) if style == 0 { return lastError("GetWindowLong") } if parent == nil { style &^= win.WS_CHILD style |= win.WS_POPUP if win.SetParent(wb.hWnd, 0) == 0 { return lastError("SetParent") } win.SetLastError(0) if win.SetWindowLong(wb.hWnd, win.GWL_STYLE, int32(style)) == 0 { return lastError("SetWindowLong") } } else { style |= win.WS_CHILD style &^= win.WS_POPUP win.SetLastError(0) if win.SetWindowLong(wb.hWnd, win.GWL_STYLE, int32(style)) == 0 { return lastError("SetWindowLong") } if win.SetParent(wb.hWnd, parent.Handle()) == 0 { return lastError("SetParent") } } b := wb.Bounds() if !win.SetWindowPos( wb.hWnd, win.HWND_BOTTOM, int32(b.X), int32(b.Y), int32(b.Width), int32(b.Height), win.SWP_FRAMECHANGED) { return lastError("SetWindowPos") } oldParent := wb.parent wb.parent = parent var oldChildren, newChildren *WidgetList if oldParent != nil { oldChildren = oldParent.Children() } if parent != nil { newChildren = parent.Children() } if newChildren == oldChildren { return nil } widget := wb.window.(Widget) if oldChildren != nil { oldChildren.Remove(widget) } if newChildren != nil && !newChildren.containsHandle(wb.hWnd) { newChildren.Add(widget) } return nil }
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 Size if layout != nil { min = fb.sizeFromClientSize(layout.MinSize()) } mmi.PtMinTrackSize = win.POINT{ int32(maxi(min.Width, fb.minSize.Width)), int32(maxi(min.Height, fb.minSize.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) }
func NewGroupBox(parent Container) (*GroupBox, error) { gb := new(GroupBox) if err := InitWidget( gb, parent, groupBoxWindowClass, win.WS_VISIBLE, win.WS_EX_CONTROLPARENT); err != nil { return nil, err } succeeded := false defer func() { if !succeeded { gb.Dispose() } }() gb.hWndGroupBox = win.CreateWindowEx( 0, syscall.StringToUTF16Ptr("BUTTON"), nil, win.WS_CHILD|win.WS_VISIBLE|win.BS_GROUPBOX, 0, 0, 80, 24, gb.hWnd, 0, 0, nil) if gb.hWndGroupBox == 0 { return nil, lastError("CreateWindowEx(BUTTON)") } setWindowFont(gb.hWndGroupBox, gb.Font()) var err error gb.checkBox, err = NewCheckBox(gb) if err != nil { return nil, err } gb.checkBox.SetChecked(true) gb.checkBox.CheckedChanged().Attach(func() { gb.applyEnabledFromCheckBox(gb.checkBox.Checked()) }) setWindowVisible(gb.checkBox.hWnd, false) gb.composite, err = NewComposite(gb) if err != nil { return nil, err } win.SetWindowPos(gb.checkBox.hWnd, win.HWND_TOP, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE) gb.MustRegisterProperty("Title", NewProperty( func() interface{} { return gb.Title() }, func(v interface{}) error { return gb.SetTitle(v.(string)) }, gb.titleChangedPublisher.Event())) gb.MustRegisterProperty("Checked", NewBoolProperty( func() bool { return gb.Checked() }, func(v bool) error { gb.SetChecked(v) return nil }, gb.CheckedChanged())) succeeded = true return gb, nil }