1
在Windows窗體和C#中,我使用WS_EX_LAYERED樣式的表單,並調用UpdateLayeredWindow將背景設置爲透明/ alpha混合的圖像:分層窗口,UpdateLayeredWindow,alpha混合和鼠標事件
NativeMethods.BLENDFUNCTION blend = new NativeMethods.BLENDFUNCTION();
blend.BlendOp = NativeMethods.AC_SRC_OVER;
blend.BlendFlags = 0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = NativeMethods.AC_SRC_ALPHA;
NativeMethods.UpdateLayeredWindow(form.Handle, screenDc, ref topPos, ref size,
memDc, ref pointSource, 0, ref blend, NativeMethods.ULW_ALPHA);
在圖像透明的窗體區域,窗體不會收到鼠標事件。他們去窗體下的窗口。
是否有窗口樣式或選項可以設置爲使窗體在其整個表面上接收鼠標事件(鼠標移動,鼠標向下等)?
我沒有設置WS_EX_TRANSPARENT風格擺在首位。無論如何,我試圖刪除它,但它不起作用。透明區域上的鼠標事件仍然通過。 (要檢查,我也嘗試設置它,設置時,所有鼠標事件都會通過,即使在非透明區域也是如此。) – Jamrelian
@Jamrelian你可以欺騙並設置透明區域爲alpha值1(255)。我想知道這是否基本上是明確的,但不會下降 – Alan
不幸的是,我不控制圖像與設置爲背景的alpha混合,用戶選擇它。這意味着我應該以編程方式檢查並更改任何加載圖像中每個像素的Alpha值。聽起來像很多性能問題... – Jamrelian