Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Здравствуйте!
Посоветовали ваш форум, сказали, что здесь есть люди, которые могут помочь в решении следующей задачи.
В моей программе требуется сделать так, чтобы клики проходили сквозь форму. Т.е. есть приложение, при нажатии на кнопку на первом окне открывается второе окно сквозь которое должны проходить клики (например, если за окном ярлык - то клик идет по ярлыку, если мы смотрим фильм и жмем на плеер сквозь то же самое окно - ставится пауза). Т.е. это окно должно быть просто информационным. Оно не должно даже активироваться при клике по нему.

Я пишу код в C#, а сами формы делаю в WPF. Все дело в том, что здесь не обойтись без API, а я в этом абсолютно не шарю. Поэтому очень прошу помочь!
Буду очень благодарен за помощь!
6 ноя 18, 20:42    [21725862]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
А такое не подойдет?
<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525" Background="Transparent"
        WindowStyle="None" AllowsTransparency="True">

  <Border BorderThickness="2" BorderBrush="Blue">
    <TextBlock Text="BlaBla" FontSize="20" Foreground="Aqua" />
  </Border>


</Window>

правда, тут клики проходят только сквозь прозрачные места - сквозь текст не проходят и IsHitTestVisible=False не помогает
6 ноя 18, 21:10    [21725879]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Такое я уже пробовал делать. Суть в том, что на форме будет изображение и клики должны проходить сквозь него в том числе

Я находил вот такой код, но во-первых, это C++, во-вторых, я не понимаю, что в нем и как работает (и должно ли вообще работать)

public enum GWL
{
    ExStyle = -20
}

public enum WS_EX
{
    Transparent = 0x20,
    Layered = 0x80000
}

public enum LWA
{
    ColorKey = 0x1,
    Alpha = 0x2
}

[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
public static extern int GetWindowLong(IntPtr hWnd, GWL nIndex);

[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
public static extern int SetWindowLong(IntPtr hWnd, GWL nIndex, int dwNewLong);

[DllImport("user32.dll", EntryPoint = "SetLayeredWindowAttributes")]
public static extern bool SetLayeredWindowAttributes(IntPtr hWnd, int crKey, byte alpha, LWA dwFlags);

protected override void OnShown(EventArgs e)
{
    base.OnShown(e);
    int wl = GetWindowLong(this.Handle, GWL.ExStyle);
    wl = wl | 0x80000 | 0x20;
    SetWindowLong(this.Handle, GWL.ExStyle, wl);
    SetLayeredWindowAttributes(this.Handle, 0, 128, LWA.Alpha);
}
6 ноя 18, 21:18    [21725881]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
А такое не подойдет?
правда, тут клики проходят только сквозь прозрачные места - сквозь текст не проходят и IsHitTestVisible=False не помогает
Это я посоветовал сюда обратиться. Автору нужно полностью "сквозное" для кликов. Или чтобы пр приближении к окну курсора, окно исчезало и появлялось когда курсор отдаляется.
Я не знаю такое, вообще, возможно без API ? Ведь распределение событий между приложениями это работа OC и, кажется, выходит за рамки Net.
6 ноя 18, 21:21    [21725884]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Eld Hasp абсолютно прав!)
6 ноя 18, 21:27    [21725887]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
Такое ощущение, что этот сишный код делает то же, что и мой XAML, то есть устанавливает прозрачность окна.
Но дело в том, что содержимое окна в WPF отрисовывается через DirectX, а не через GDI
Прозрачность окна WPF отрабатывает нормально, почему не отрабатывает IsHitTestVisible - непонятно.
6 ноя 18, 21:46    [21725898]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Насколько я понял, IsHitTestVisible просто убирает клик по окну. Т.е. если щелкнуть левой кнопкой мыши по окну - клик просто не будет воспринят, но окно все равно будет активировано
6 ноя 18, 21:49    [21725900]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19959
MrKoder
Насколько я понял, IsHitTestVisible просто убирает клик по окну. Т.е. если щелкнуть левой кнопкой мыши по окну - клик просто не будет воспринят, но окно все равно будет активировано
Нет, у меня как раз клик проходит сквозь окно и активирует то, на что было кликнуто за ним.
Но я про тот же текст. Клик на тексте как раз-таки активирует окно, даже если на текстблоке IsHitTestVisible=False
6 ноя 18, 22:46    [21725931]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Shocker.Pro
Нет, у меня как раз клик проходит сквозь окно и активирует то, на что было кликнуто за ним.
По моему дело в прозрачности. Если окно прозрачно то клик проходит не зависимо от установок IsHitTestVisible. Это ещё, если правильно помню, появилось в WinXP - так делали окна не прямоугольной формы.
Shocker.Pro
Но я про тот же текст. Клик на тексте как раз-таки активирует окно, даже если на текстблоке IsHitTestVisible=False
IsHitTestVisible - оно по-моему действует только в рамках приложения. Или даже окна.
6 ноя 18, 23:01    [21725935]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Да, клики сквозь прозрачную форму проходят и без указания этого свойства
6 ноя 18, 23:06    [21725942]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
MrKoder, прочитайте https://stackoverrun.com/ru/q/6061756
Может можно получить координаты курсора на экране и если они близки координатам окна скрыть его.
6 ноя 18, 23:19    [21725948]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
MrKoder, И это тоже посмотрите http://vsokovikov.narod.ru/New_MSDN_API/Cursor/fn_getcursorpos.htm
6 ноя 18, 23:28    [21725953]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
так делали окна не прямоугольной формы.
там в дырках-вырезах не было ничего.
Вы же хотите сверху нарисовать, а под ним кликнуть то что не видно?
Ничего не понял.
6 ноя 18, 23:36    [21725962]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
MrKoder
Т.е. это окно должно быть просто информационным.
делают balloonhint привязанный к курсору.
6 ноя 18, 23:38    [21725964]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Petro123
там в дырках-вырезах не было ничего.
Вы же хотите сверху нарисовать, а под ним кликнуть то что не видно?
Ничего не понял.
Да, я и пишу о прозрачных областях в которых ничего нет. Такое возможно.
Но автору нужно "сквозной" клик через непрозрачную или полупрозрачную область.
6 ноя 18, 23:49    [21725971]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp
Но автору нужно "сквозной" клик через непрозрачную или полупрозрачную область.

так и представил, иконку 64 на 64 и при клике "на ней\ под ней" запустился почтовый клиент с зависанием на 5 минут))
7 ноя 18, 00:14    [21725984]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Eld Hasp
Member

Откуда:
Сообщений: 178
Petro123
Eld Hasp
Но автору нужно "сквозной" клик через непрозрачную или полупрозрачную область.

так и представил, иконку 64 на 64 и при клике "на ней\ под ней" запустился почтовый клиент с зависанием на 5 минут))
Как я понял из разъяснений автора, он делает какое-то информационное окошко которое нужно во время какой-то игры. А так как оно заслоняет поле игры, то надо чтобы клики через него попадали в окно игры.
7 ноя 18, 00:33    [21726002]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
Eld Hasp,
В играх окна рукописные и могут не иметь хэндла.
Т.е.игра рисуется слоями на экране.... Сцена.
И такой проблемы автора там не будет.
2. В играх уже есть движок с окнами. Без движка как то странно.
3. В играх специфика. На ресурс https://gamedev.ru/forum/
7 ноя 18, 07:18    [21726058]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Я делаю, пот сути, оверлей, плагин для игр. Это будет просто прицел по центру экрана (в виде точки, крестика, треугольника и т.д.). Он не привязывается к какой-либо конкретной игре
7 ноя 18, 08:04    [21726077]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
MrKoder
Я делаю, пот сути, оверлей, плагин для игр. Это будет просто прицел по центру экрана (в виде точки, крестика, треугольника и т.д.). Он не привязывается к какой-либо конкретной игре
нельзя было сразу это написать?
7 ноя 18, 08:30    [21726086]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
MrKoder,
Приложение должно выводить для плагинов onPaint событие.
И рисуй там хоть прицел, хоть меридианы координат.
7 ноя 18, 08:56    [21726092]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Прицел то будет в виде картинки, а не рисованный пикселями "от руки"
7 ноя 18, 09:04    [21726097]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
И вопрос опять же в том, как это реализовать
7 ноя 18, 09:05    [21726098]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37082
MrKoder
Прицел то будет в виде картинки, а не рисованный пикселями "от руки"
в смысле?
В onPaint ты копируешь картинку на Canvas, сохраняя прозрачность.
Что не так?
7 ноя 18, 09:45    [21726128]     Ответить | Цитировать Сообщить модератору
 Re: Клики сквозь форму  [new]
MrKoder
Member

Откуда:
Сообщений: 45
Можно, пожалуйста, пример
Я не так давно работаю с c# и wpf, еще не сталкивался с onPaint
7 ноя 18, 09:56    [21726143]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить