func (mw MainWindow) Create() error { w, err := walk.NewMainWindow() if err != nil { return err } tlwi := topLevelWindowInfo{ Name: mw.Name, Font: mw.Font, ToolTipText: "", MinSize: mw.MinSize, MaxSize: mw.MaxSize, ContextMenuItems: mw.ContextMenuItems, OnKeyDown: mw.OnKeyDown, OnKeyPress: mw.OnKeyPress, OnKeyUp: mw.OnKeyUp, OnMouseDown: mw.OnMouseDown, OnMouseMove: mw.OnMouseMove, OnMouseUp: mw.OnMouseUp, OnSizeChanged: mw.OnSizeChanged, DataBinder: mw.DataBinder, Layout: mw.Layout, Children: mw.Children, } builder := NewBuilder(nil) w.SetSuspended(true) builder.Defer(func() error { w.SetSuspended(false) return nil }) builder.deferBuildMenuActions(w.Menu(), mw.MenuItems) builder.deferBuildActions(w.ToolBar().Actions(), mw.ToolBarItems) return builder.InitWidget(tlwi, w, func() error { if err := w.SetTitle(mw.Title); err != nil { return err } if err := w.SetSize(mw.Size.toW()); err != nil { return err } imageList, err := walk.NewImageList(walk.Size{16, 16}, 0) if err != nil { return err } w.ToolBar().SetImageList(imageList) if mw.AssignTo != nil { *mw.AssignTo = w } builder.Defer(func() error { w.Show() return nil }) return nil }) }
func main() { // We need either a walk.MainWindow or a walk.Dialog for their message loop. // We will not make it visible in this example, though. mw, err := walk.NewMainWindow() if err != nil { log.Fatal(err) } // We load our icon from a file. icon, err := walk.NewIconFromFile("../img/x.ico") if err != nil { log.Fatal(err) } // Create the notify icon and make sure we clean it up on exit. ni, err := walk.NewNotifyIcon() if err != nil { log.Fatal(err) } defer ni.Dispose() // Set the icon and a tool tip text. if err := ni.SetIcon(icon); err != nil { log.Fatal(err) } if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil { log.Fatal(err) } // When the left mouse button is pressed, bring up our balloon. ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { if button != walk.LeftButton { return } if err := ni.ShowCustom( "Walk NotifyIcon Example", "There are multiple ShowX methods sporting different icons."); err != nil { log.Fatal(err) } }) // We put an exit action into the context menu. exitAction := walk.NewAction() if err := exitAction.SetText("E&xit"); err != nil { log.Fatal(err) } exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) if err := ni.ContextMenu().Actions().Add(exitAction); err != nil { log.Fatal(err) } // The notify icon is hidden initially, so we have to make it visible. if err := ni.SetVisible(true); err != nil { log.Fatal(err) } // Now that the icon is visible, we can bring up an info balloon. if err := ni.ShowInfo("Walk NotifyIcon Example", "Click the icon to show again."); err != nil { log.Fatal(err) } // Run the message loop. mw.Run() }