由於事實證明這是不可能的,我最終將Opacity設置爲0.01的第二個動態生成的表單懸浮在頂部。然後,我使用主窗體上的Resize和LocationChanged事件調整大小,並根據需要移動疊加窗體。然後我只需要處理疊加窗體點擊事件就可以根據需要進行處理。
public MainFrom()
{
InitializeComponent();
f = new Form();
f.Size = panel1.Size;
f.FormBorderStyle = FormBorderStyle.None;
f.BackColor = Color.Black;
f.Opacity = 0.01;
f.ShowInTaskbar = false;
f.Show(this);
f.Click += new System.EventHandler(this.UserClicked);
}
此代碼,然後重新調整疊加的形式佔主要形式邊界:
private void SetLocation()
{
// These next 2 lines calculate the width of the border
// and the title bar and then use these to off set the floating
// forms location correctly.
int xOffset = (this.Width - this.ClientSize.Width)/2;
int yOffset= this.Height - this.ClientSize.Height - xOffset;
int x = this.Location.X + panel1.Location.X + xOffset;
int y = this.Location.Y + panel1.Location.Y + yOffset;
f.Location = new Point(x, y);
}
根據現代藝術博物館的工具,這是100%的單兼容和代碼編譯在MonoDevelop的預期。但是,如果我運行這個,我看到一個空引用異常,我沒有看到在加載MS .NET中,這可能是可以修復的,但我還沒有看到這一點。
對於眼睛而言透明的窗口的任何部分對於鼠標事件都是透明的。這是設計而不能改變的。如果窗口屬於同一個線程,則使用IMessageFilter。如果沒有,那麼你需要一個由SetWindowsHookEx()設置的低級別的鼠標鉤子。請注意,透明度覆蓋視頻的效果往往不佳,它們使用相同的視頻硬件功能。沉重的閃爍並不少見。 –