Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Клики сквозь форму / 25 сообщений из 42, страница 1 из 2
06.11.2018, 20:42
    #39728880
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Здравствуйте!
Посоветовали ваш форум, сказали, что здесь есть люди, которые могут помочь в решении следующей задачи.
В моей программе требуется сделать так, чтобы клики проходили сквозь форму. Т.е. есть приложение, при нажатии на кнопку на первом окне открывается второе окно сквозь которое должны проходить клики (например, если за окном ярлык - то клик идет по ярлыку, если мы смотрим фильм и жмем на плеер сквозь то же самое окно - ставится пауза). Т.е. это окно должно быть просто информационным. Оно не должно даже активироваться при клике по нему.

Я пишу код в C#, а сами формы делаю в WPF. Все дело в том, что здесь не обойтись без API, а я в этом абсолютно не шарю. Поэтому очень прошу помочь!
Буду очень благодарен за помощь!
...
Рейтинг: 0 / 0
06.11.2018, 21:10
    #39728890
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
А такое не подойдет?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<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 не помогает
...
Рейтинг: 0 / 0
06.11.2018, 21:18
    #39728892
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Такое я уже пробовал делать. Суть в том, что на форме будет изображение и клики должны проходить сквозь него в том числе

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
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);
}
...
Рейтинг: 0 / 0
06.11.2018, 21:21
    #39728894
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Shocker.ProА такое не подойдет?
правда, тут клики проходят только сквозь прозрачные места - сквозь текст не проходят и IsHitTestVisible=False не помогаетЭто я посоветовал сюда обратиться. Автору нужно полностью "сквозное" для кликов. Или чтобы пр приближении к окну курсора, окно исчезало и появлялось когда курсор отдаляется.
Я не знаю такое, вообще, возможно без API ? Ведь распределение событий между приложениями это работа OC и, кажется, выходит за рамки Net.
...
Рейтинг: 0 / 0
06.11.2018, 21:27
    #39728897
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Eld Hasp абсолютно прав!)
...
Рейтинг: 0 / 0
06.11.2018, 21:46
    #39728906
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Такое ощущение, что этот сишный код делает то же, что и мой XAML, то есть устанавливает прозрачность окна.
Но дело в том, что содержимое окна в WPF отрисовывается через DirectX, а не через GDI
Прозрачность окна WPF отрабатывает нормально, почему не отрабатывает IsHitTestVisible - непонятно.
...
Рейтинг: 0 / 0
06.11.2018, 21:49
    #39728907
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Насколько я понял, IsHitTestVisible просто убирает клик по окну. Т.е. если щелкнуть левой кнопкой мыши по окну - клик просто не будет воспринят, но окно все равно будет активировано
...
Рейтинг: 0 / 0
06.11.2018, 22:46
    #39728914
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoderНасколько я понял, IsHitTestVisible просто убирает клик по окну. Т.е. если щелкнуть левой кнопкой мыши по окну - клик просто не будет воспринят, но окно все равно будет активированоНет, у меня как раз клик проходит сквозь окно и активирует то, на что было кликнуто за ним.
Но я про тот же текст. Клик на тексте как раз-таки активирует окно, даже если на текстблоке IsHitTestVisible=False
...
Рейтинг: 0 / 0
06.11.2018, 23:01
    #39728917
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Shocker.ProНет, у меня как раз клик проходит сквозь окно и активирует то, на что было кликнуто за ним.По моему дело в прозрачности. Если окно прозрачно то клик проходит не зависимо от установок IsHitTestVisible. Это ещё, если правильно помню, появилось в WinXP - так делали окна не прямоугольной формы. Shocker.ProНо я про тот же текст. Клик на тексте как раз-таки активирует окно, даже если на текстблоке IsHitTestVisible=FalseIsHitTestVisible - оно по-моему действует только в рамках приложения. Или даже окна.
...
Рейтинг: 0 / 0
06.11.2018, 23:06
    #39728921
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Да, клики сквозь прозрачную форму проходят и без указания этого свойства
...
Рейтинг: 0 / 0
06.11.2018, 23:19
    #39728924
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoder, прочитайте https://stackoverrun.com/ru/q/6061756
Может можно получить координаты курсора на экране и если они близки координатам окна скрыть его.
...
Рейтинг: 0 / 0
06.11.2018, 23:28
    #39728926
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoder, И это тоже посмотрите http://vsokovikov.narod.ru/New_MSDN_API/Cursor/fn_getcursorpos.htm
...
Рейтинг: 0 / 0
06.11.2018, 23:36
    #39728932
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Eld Haspтак делали окна не прямоугольной формы. там в дырках-вырезах не было ничего.
Вы же хотите сверху нарисовать, а под ним кликнуть то что не видно?
Ничего не понял.
...
Рейтинг: 0 / 0
06.11.2018, 23:38
    #39728933
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoderТ.е. это окно должно быть просто информационным. делают balloonhint привязанный к курсору.
...
Рейтинг: 0 / 0
06.11.2018, 23:49
    #39728937
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Petro123там в дырках-вырезах не было ничего.
Вы же хотите сверху нарисовать, а под ним кликнуть то что не видно?
Ничего не понял.Да, я и пишу о прозрачных областях в которых ничего нет. Такое возможно.
Но автору нужно "сквозной" клик через непрозрачную или полупрозрачную область.
...
Рейтинг: 0 / 0
07.11.2018, 00:14
    #39728944
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Eld HaspНо автору нужно "сквозной" клик через непрозрачную или полупрозрачную область.
так и представил, иконку 64 на 64 и при клике "на ней\ под ней" запустился почтовый клиент с зависанием на 5 минут))
...
Рейтинг: 0 / 0
07.11.2018, 00:33
    #39728954
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Petro123Eld HaspНо автору нужно "сквозной" клик через непрозрачную или полупрозрачную область.
так и представил, иконку 64 на 64 и при клике "на ней\ под ней" запустился почтовый клиент с зависанием на 5 минут))Как я понял из разъяснений автора, он делает какое-то информационное окошко которое нужно во время какой-то игры. А так как оно заслоняет поле игры, то надо чтобы клики через него попадали в окно игры.
...
Рейтинг: 0 / 0
07.11.2018, 07:18
    #39728992
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Eld Hasp,
В играх окна рукописные и могут не иметь хэндла.
Т.е.игра рисуется слоями на экране.... Сцена.
И такой проблемы автора там не будет.
2. В играх уже есть движок с окнами. Без движка как то странно.
3. В играх специфика. На ресурс https://gamedev.ru/forum/
...
Рейтинг: 0 / 0
07.11.2018, 08:04
    #39729002
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Я делаю, пот сути, оверлей, плагин для игр. Это будет просто прицел по центру экрана (в виде точки, крестика, треугольника и т.д.). Он не привязывается к какой-либо конкретной игре
...
Рейтинг: 0 / 0
07.11.2018, 08:30
    #39729007
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoderЯ делаю, пот сути, оверлей, плагин для игр. Это будет просто прицел по центру экрана (в виде точки, крестика, треугольника и т.д.). Он не привязывается к какой-либо конкретной игренельзя было сразу это написать?
...
Рейтинг: 0 / 0
07.11.2018, 08:56
    #39729010
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoder,
Приложение должно выводить для плагинов onPaint событие.
И рисуй там хоть прицел, хоть меридианы координат.
...
Рейтинг: 0 / 0
07.11.2018, 09:04
    #39729013
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Прицел то будет в виде картинки, а не рисованный пикселями "от руки"
...
Рейтинг: 0 / 0
07.11.2018, 09:05
    #39729014
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
И вопрос опять же в том, как это реализовать
...
Рейтинг: 0 / 0
07.11.2018, 09:45
    #39729031
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
MrKoderПрицел то будет в виде картинки, а не рисованный пикселями "от руки"в смысле?
В onPaint ты копируешь картинку на Canvas, сохраняя прозрачность.
Что не так?
...
Рейтинг: 0 / 0
07.11.2018, 09:56
    #39729042
MrKoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клики сквозь форму
Можно, пожалуйста, пример
Я не так давно работаю с c# и wpf, еще не сталкивался с onPaint
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Клики сквозь форму / 25 сообщений из 42, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]