29e90cc13b
This focuses on Windows first, but coudl be used for Mac and possibly linux in the future.
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
//go:build windows
|
|
|
|
package wintray
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
// Contains window class information.
|
|
// It is used with the RegisterClassEx and GetClassInfoEx functions.
|
|
// https://msdn.microsoft.com/en-us/library/ms633577.aspx
|
|
type wndClassEx struct {
|
|
Size, Style uint32
|
|
WndProc uintptr
|
|
ClsExtra, WndExtra int32
|
|
Instance, Icon, Cursor, Background windows.Handle
|
|
MenuName, ClassName *uint16
|
|
IconSm windows.Handle
|
|
}
|
|
|
|
// Registers a window class for subsequent use in calls to the CreateWindow or CreateWindowEx function.
|
|
// https://msdn.microsoft.com/en-us/library/ms633587.aspx
|
|
func (w *wndClassEx) register() error {
|
|
w.Size = uint32(unsafe.Sizeof(*w))
|
|
res, _, err := pRegisterClass.Call(uintptr(unsafe.Pointer(w)))
|
|
if res == 0 {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Unregisters a window class, freeing the memory required for the class.
|
|
// https://msdn.microsoft.com/en-us/library/ms644899.aspx
|
|
func (w *wndClassEx) unregister() error {
|
|
res, _, err := pUnregisterClass.Call(
|
|
uintptr(unsafe.Pointer(w.ClassName)),
|
|
uintptr(w.Instance),
|
|
)
|
|
if res == 0 {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|