void _windowStateChangeHook_WinEventReceived(object sender, WinEventHook.WinEventArgs e)
{
if (!WindowChangedEventArgs.IsSupportedWinEvent(e.EventType))
return;
var className = Win32Helper.GetClassName(e.WindowHandle);
if (e.EventType == WinEventHook.WinEvent.EVENT_OBJECT_FOCUS)
{
// Might raise change event for Unfocus
if (!UpdateFocus(e.WindowHandle, className))
{
// We already have the right focus
return;
}
}
// Debug.Print("### Thread receiving WindowStateChange: " + Thread.CurrentThread.ManagedThreadId);
switch (className)
{
//case _sheetWindowClass:
// if (e.EventType == WinEventHook.WinEvent.EVENT_OBJECT_SHOW)
// {
// // Maybe a new workbook is on top...
// // Note that there is also an EVENT_OBJECT_PARENTCHANGE (which we are not subscribing to at the moment
// }
// break;
case _popupListClass:
PopupListWindowChanged?.Invoke(this, new WindowChangedEventArgs(e.WindowHandle, e.EventType));
break;
case _inCellEditClass:
InCellEditWindowChanged?.Invoke(this, new WindowChangedEventArgs(e.WindowHandle, e.EventType));
break;
case _formulaBarClass:
FormulaBarWindowChanged?.Invoke(this, new WindowChangedEventArgs(e.WindowHandle, e.EventType));
break;
case _excelToolTipClass:
ExcelToolTipWindowChanged?.Invoke(this, new WindowChangedEventArgs(e.WindowHandle, e.EventType));
break;
//case _nuiDialogClass:
// // Debug.Print($"SelectDataSource {_selectDataSourceClass} Window update: {e.WindowHandle:X}, EventType: {e.EventType}, idChild: {e.ChildId}");
// if (e.EventType == WinEventHook.WinEvent.EVENT_OBJECT_CREATE)
// {
// // Get the name of this window - maybe ours or some other NUIDialog
// var windowTitle = Win32Helper.GetText(e.WindowHandle);
// if (windowTitle.Equals(_selectDataSourceTitle, StringComparison.OrdinalIgnoreCase))
// {
// SelectDataSourceWindow = e.WindowHandle;
// SelectDataSourceWindowChanged?.Invoke(this,
// new WindowChangedEventArgs { Type = WindowChangedEventArgs.ChangeType.Create });
// }
// }
// else if (SelectDataSourceWindow == e.WindowHandle && e.EventType == WinEventHook.WinEvent.EVENT_OBJECT_SHOW)
// {
// IsSelectDataSourceWindowVisible = true;
// SelectDataSourceWindowChanged?.Invoke(this,
// new WindowChangedEventArgs { Type = WindowChangedEventArgs.ChangeType.Create });
// }
// else if (SelectDataSourceWindow == e.WindowHandle && e.EventType == WinEventHook.WinEvent.EVENT_OBJECT_HIDE)
// {
// IsSelectDataSourceWindowVisible = false;
// SelectDataSourceWindowChanged?.Invoke(this, new WindowChangedEventArgs { Type = WindowChangedEventArgs.ChangeType.Hide });
// }
// else if (SelectDataSourceWindow == e.WindowHandle && e.EventType == WinEventHook.WinEvent.EVENT_OBJECT_DESTROY)
// {
// IsSelectDataSourceWindowVisible = false;
// SelectDataSourceWindow = IntPtr.Zero;
// SelectDataSourceWindowChanged?.Invoke(this, new WindowChangedEventArgs { Type = WindowChangedEventArgs.ChangeType.Destroy });
// }
// break;
default:
//InCellEditWindowChanged(this, EventArgs.Empty);
break;
}
}