2013-01-18 137 views
1

您知道何時有一個凍結的窗口,但是當您將另一個窗口拖過頂部時會留下蹤跡?有時它看起來有點像Windows 3的Solitaire的結束:)當你完成(如我的截圖)。我想創建一個C#窗口(winforms/wpf)應用程序,創建一個這樣的表面,並允許我捕捉圖像,但我有點在失去從哪裏開始。創建「凍結窗口」效果

圖片:

+0

當您繪製新位置時,請停止清除屏幕緩衝區。 – asawyer

+12

最簡單的方法就是運行Windows。它不可避免地發生在某個時刻。 –

+0

實例化一大堆窗口XD –

回答

6

這將是與WPF容易。您可以從任何控件創建VisualBrush,包括WindowFrameworkElement。一旦你有了這個VisualBrush,你可以把它繪製在你的表格上,它會產生同樣的效果。或者,如果您想使用圖片而不是UI元素,則可以使用ImageBrush

當你繪畫的時候,每次只用一對X/Y來抵消它,它會看起來就像它覆蓋(er .. overpaints?)本身!

您可以創建自己的類FrozenVisualHostFrameworkElement派生來託管渲染DrawingVisual。請參閱:MSDN: Using DrawingVisual Objects

重寫你的FrozenVisualHost.OnRender()方法將允許你畫你的「凍結快照」,你記錄鼠標移動(通過MouseMove)。只要確保您調用InvalidateVisual()方法來更新主機控制。

一個警告:從窗口創建VisualBrush不會捕獲標題欄或窗口邊框鑲邊。如果你想這樣做,你必須手動抓取快照(GDI):As described here。然而,您可以使用Bitmap來爲您的ImageBrush做類似的渲染。

+1

這聽起來很有希望。我可以將它與鼠標移動連接起來,並在一段時間內對它進行繪製以獲得相同的基於速度的效果(在真正的凍結窗口上移動的速度越快,原始窗口越多,出現的越慢,移動越慢你得到的只是一個純色,等等......) – Peter

+0

這實際上很聰明。我打算寫一個關於實際效果的答案,使用帶有手動(和錯誤)窗口繪圖的經典Windows消息循環,但是這個...我更喜歡這個:) –