2014-09-26 103 views
0

我有一個WPF應用程序,它通過在透明窗口上繪畫來在計算機屏幕上進行註釋。透明度是用PInvoke的設置:在16位顏色深度上使用WS_EX_TRANSPARENT的透明度

extendedWindowStyle = GetWindowLong(hwnd, GWL_EXSTYLE); 
SetWindowLong(hwnd, GWL_EXSTYLE, extendedWindowStyle | WS_EX_TRANSPARENT); 

現在我有問題,當我拒絕顯示適配器顏色質量彙總從32位到16位。 那時我不再能夠在透明窗口上繪畫,而是鼠標到達透明WPF窗口下的控件。任何想法如何解決這個問題?

(BTW使用PInvoke的是我得到了透明度的唯一途徑的「Windows Basic」和「高對比度」的主題,其關閉Aero的透明度正常工作)

+0

WS_EX_TRANSPARENT是一個很模糊的Windows黑客模擬透明度,只適用於子窗口。一個WPF應用程序永遠不需要的,很不清楚你爲什麼使用它。頂層窗口應使用AllowTransparency = True和0%不透明背景畫筆。 – 2014-09-26 14:54:25

回答

0

我終於找到了問題無關與設置透明度通過WS_EX_TRANSPARENT或通過WPF中的AllowTransparency = true,它必須處理「0%不透明背景畫筆」。我簡單地忽略了我在那裏做了什麼:爲了在透明畫布上繪畫,不能將其設置爲0%不透明,因爲這會導致您的鼠標事件被忽略。因此我將opacity設置爲01(Background =「#01FFFFFF」)。現在我意識到,使用16位彩色分辨率時,此值太小而無法檢測到。它被視爲0%不透明度,鼠標事件不再被捕獲。將背景設置爲「04FFFFFF」解決了該問題。以防萬一有人遇到同樣的問題 - 我只是看着代碼的錯誤部分試圖解決這個問題...