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

     1  //go:build windows
     2  
     3  /*
     4   * Copyright (C) 2019 The Winc Authors. All Rights Reserved.
     5   */
     6  
     7  package winc
     8  
     9  import (
    10  	"github.com/secoba/wails/v2/internal/frontend/desktop/windows/winc/w32"
    11  )
    12  
    13  // MouseControl used for creating custom controls that need mouse hover or mouse leave events.
    14  type MouseControl struct {
    15  	ControlBase
    16  	isMouseLeft bool
    17  }
    18  
    19  func (cc *MouseControl) Init(parent Controller, className string, exStyle, style uint) {
    20  	RegClassOnlyOnce(className)
    21  	cc.hwnd = CreateWindow(className, parent, exStyle, style)
    22  	cc.parent = parent
    23  	RegMsgHandler(cc)
    24  
    25  	cc.isMouseLeft = true
    26  	cc.SetFont(DefaultFont)
    27  }
    28  
    29  func (cc *MouseControl) WndProc(msg uint32, wparam, lparam uintptr) uintptr {
    30  	sender := GetMsgHandler(cc.hwnd)
    31  	switch msg {
    32  	case w32.WM_CREATE:
    33  		internalTrackMouseEvent(cc.hwnd)
    34  		cc.onCreate.Fire(NewEvent(sender, nil))
    35  	case w32.WM_CLOSE:
    36  		cc.onClose.Fire(NewEvent(sender, nil))
    37  	case w32.WM_MOUSEMOVE:
    38  		//if cc.isMouseLeft {
    39  
    40  		cc.onMouseHover.Fire(NewEvent(sender, nil))
    41  		//internalTrackMouseEvent(cc.hwnd)
    42  		cc.isMouseLeft = false
    43  
    44  		//}
    45  	case w32.WM_MOUSELEAVE:
    46  		cc.onMouseLeave.Fire(NewEvent(sender, nil))
    47  		cc.isMouseLeft = true
    48  	}
    49  	return w32.DefWindowProc(cc.hwnd, msg, wparam, lparam)
    50  }