gui/docs/ref/wails-v3/guides/customising-windows.mdx
Snider 4bdbb68f46
Some checks failed
Security Scan / security (push) Failing after 9s
Test / test (push) Failing after 1m21s
refactor: update import path from go-config to core/config
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 10:26:36 +00:00

129 lines
3.4 KiB
Text

---
title: Customising Windows in Wails
sidebar:
order: 10
---
import {Badge} from '@astrojs/starlight/components';
Relevant Platforms: <Badge text="Windows" variant="note" /> <Badge text="macOS" variant="success" />
<br/>
Wails provides an API to control the appearance and functionality of the
controls of a window. This functionality is available on Windows and macOS, but
not on Linux.
## Setting the Window Button States
The button states are defined by the `ButtonState` enum:
```go
type ButtonState int
const (
ButtonEnabled ButtonState = 0
ButtonDisabled ButtonState = 1
ButtonHidden ButtonState = 2
)
```
- `ButtonEnabled`: The button is enabled and visible.
- `ButtonDisabled`: The button is visible but disabled (grayed out).
- `ButtonHidden`: The button is hidden from the titlebar.
The button states can be set during window creation or at runtime.
### Setting Button States During Window Creation
When creating a new window, you can set the initial state of the buttons using
the `WebviewWindowOptions` struct:
```go title="main.go"
package main
import (
"github.com/wailsapp/wails/v3/pkg/application"
)
func main() {
app := application.New(application.Options{
Name: "My Application",
})
app.Window.NewWithOptions(application.WebviewWindowOptions{
MinimiseButtonState: application.ButtonHidden,
MaximiseButtonState: application.ButtonDisabled,
CloseButtonState: application.ButtonEnabled,
})
app.Run()
}
```
In the example above, the minimise button is hidden, the maximise button is
inactive (grayed out), and the close button is active.
### Setting Button States at Runtime
You can also change the button states at runtime using the following methods on
the `Window` interface:
```go
window.SetMinimiseButtonState(wails.ButtonHidden)
window.SetMaximiseButtonState(wails.ButtonEnabled)
window.SetCloseButtonState(wails.ButtonDisabled)
```
### Platform Differences
The button state functionality behaves slightly differently on Windows and
macOS:
| | Windows | Mac |
|-----------------------|------------------------|------------------------|
| Disable Min/Max/Close | Disables Min/Max/Close | Disables Min/Max/Close |
| Hide Min | Disables Min | Hides Min button |
| Hide Max | Disables Max | Hides Max button |
| Hide Close | Hides all controls | Hides Close |
Note: On Windows, it is not possible to hide the Min/Max buttons individually.
However, disabling both will hide both of the controls and only show the close
button.
### Controlling Window Style (Windows)
To control the style of the titlebar on Windows, you can use the `ExStyle` field
in the `WebviewWindowOptions` struct:
Example:
```go title="main.go"
package main
import (
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/w32"
)
func main() {
app := application.New(application.Options{
Name: "My Application",
})
app.Window.NewWithOptions(application.WebviewWindowOptions{
Windows: application.WindowsWindow{
ExStyle: w32.WS_EX_TOOLWINDOW | w32.WS_EX_NOREDIRECTIONBITMAP | w32.WS_EX_TOPMOST,
},
})
app.Run()
}
```
Other options that affect the Extended Style of a window will be overridden by
this setting:
- HiddenOnTaskbar
- AlwaysOnTop
- IgnoreMouseEvents
- BackgroundType