首先,我想定義我的意思是透明點擊在下面的文字:這意味着點擊通過我的窗口沒有任何處理,直接到無論哪個窗戶都在下面。我需要這種行爲,因爲這個應用程序是爲了覆蓋遊戲。製作一個WPF窗口點擊,但不是它的控件
我搜索了有關使窗口對點擊透明的問題。我想知道是否有一種方法可以使窗口本身對點擊透明,而不是其控件(如文本框和按鈕)。
下面是窗口標記:
<Window x:Class="QuestBrowser.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Quest Browser"
Height="350" Width="525"
AllowsTransparency="True" WindowStyle="None" Topmost="True">
<Window.Background>
<SolidColorBrush Color="White" Opacity="0.1"/>
</Window.Background>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Name="inputTxtBox"></TextBox>
</Grid>
</Window>
而且波紋管,使窗口透明的點擊(其它問題幾乎複製粘貼代碼,因爲我不擅長在所有低級別的Windows編程)。
namespace Win32Utils
{
public static class WindowHelper
{
const int WS_EX_TRANSPARENT = 0x00000020;
const int GWL_EXSTYLE = (-20);
public static void SetWindowExTransparent(IntPtr hwnd)
{
var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
}
}
}
方法WindowHelper.SetWindowExTransparent從我的方法Window.OnSourceInitialized(按照指示在帖子裏我從一個透明窗口中的代碼)的覆蓋範圍內稱爲:
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var hwnd = new WindowInteropHelper(this).Handle;
WindowHelper.SetWindowExTransparent(hwnd);
}
這確實使窗口對點擊透明,但我放入它的所有控件也是透明的(例如TextBox)。有沒有辦法使窗口表面透明點擊,但確保TextBox仍然能夠正常接收鼠標和鍵盤輸入?
我想避免出於用戶隱私原因的鼠標和鍵盤掛鉤,因爲,正如我所說,我不太瞭解Windows API。如果鉤子是唯一的方法,我會非常感激他們如何工作的「傻瓜式」解釋。
非常感謝!我所需要做的只是讓窗戶完全透明,而不像我所做的那樣只是部分透明。我不會想象窗口背景的顏色定義了它的行爲。 – FinnTheHuman
如果它滿足您的疑問,請標記它的答案 – AEonAX
我會盡快完成所有測試。再次感謝。 – FinnTheHuman