github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/winc/tooltip.go (about)

     1  //go:build windows
     2  
     3  /*
     4   * Copyright (C) 2019 The Winc Authors. All Rights Reserved.
     5   * Copyright (C) 2010-2013 Allen Dang. All Rights Reserved.
     6   */
     7  
     8  package winc
     9  
    10  import (
    11  	"syscall"
    12  	"unsafe"
    13  
    14  	"github.com/secoba/wails/v2/internal/frontend/desktop/windows/winc/w32"
    15  )
    16  
    17  type ToolTip struct {
    18  	ControlBase
    19  }
    20  
    21  func NewToolTip(parent Controller) *ToolTip {
    22  	tp := new(ToolTip)
    23  
    24  	tp.InitControl("tooltips_class32", parent, w32.WS_EX_TOPMOST, w32.WS_POPUP|w32.TTS_NOPREFIX|w32.TTS_ALWAYSTIP)
    25  	w32.SetWindowPos(tp.Handle(), w32.HWND_TOPMOST, 0, 0, 0, 0, w32.SWP_NOMOVE|w32.SWP_NOSIZE|w32.SWP_NOACTIVATE)
    26  
    27  	return tp
    28  }
    29  
    30  func (tp *ToolTip) SetTip(tool Controller, tip string) bool {
    31  	var ti w32.TOOLINFO
    32  	ti.CbSize = uint32(unsafe.Sizeof(ti))
    33  	if tool.Parent() != nil {
    34  		ti.Hwnd = tool.Parent().Handle()
    35  	}
    36  	ti.UFlags = w32.TTF_IDISHWND | w32.TTF_SUBCLASS /* | TTF_ABSOLUTE */
    37  	ti.UId = uintptr(tool.Handle())
    38  	ti.LpszText = syscall.StringToUTF16Ptr(tip)
    39  
    40  	return w32.SendMessage(tp.Handle(), w32.TTM_ADDTOOL, 0, uintptr(unsafe.Pointer(&ti))) != w32.FALSE
    41  }
    42  
    43  func (tp *ToolTip) WndProc(msg uint, wparam, lparam uintptr) uintptr {
    44  	return w32.DefWindowProc(tp.hwnd, uint32(msg), wparam, lparam)
    45  }