您知道何時有一個凍結的窗口,但是當您將另一個窗口拖過頂部時會留下蹤跡?有時它看起來有點像Windows 3的Solitaire的結束:)當你完成(如我的截圖)。我想創建一個C#窗口(winforms/wpf)應用程序,創建一個這樣的表面,並允許我捕捉圖像,但我有點在失去從哪裏開始。創建「凍結窗口」效果
圖片:
您知道何時有一個凍結的窗口,但是當您將另一個窗口拖過頂部時會留下蹤跡?有時它看起來有點像Windows 3的Solitaire的結束:)當你完成(如我的截圖)。我想創建一個C#窗口(winforms/wpf)應用程序,創建一個這樣的表面,並允許我捕捉圖像,但我有點在失去從哪裏開始。創建「凍結窗口」效果
圖片:
這將是與WPF容易。您可以從任何控件創建VisualBrush
,包括Window
或FrameworkElement
。一旦你有了這個VisualBrush
,你可以把它繪製在你的表格上,它會產生同樣的效果。或者,如果您想使用圖片而不是UI元素,則可以使用ImageBrush
。
當你繪畫的時候,每次只用一對X/Y來抵消它,它會看起來就像它覆蓋(er .. overpaints?)本身!
您可以創建自己的類FrozenVisualHost
從FrameworkElement
派生來託管渲染DrawingVisual
。請參閱:MSDN: Using DrawingVisual Objects
重寫你的FrozenVisualHost.OnRender()
方法將允許你畫你的「凍結快照」,你記錄鼠標移動(通過MouseMove
)。只要確保您調用InvalidateVisual()
方法來更新主機控制。
一個警告:從窗口創建VisualBrush
不會捕獲標題欄或窗口邊框鑲邊。如果你想這樣做,你必須手動抓取快照(GDI):As described here。然而,您可以使用Bitmap
來爲您的ImageBrush
做類似的渲染。
這聽起來很有希望。我可以將它與鼠標移動連接起來,並在一段時間內對它進行繪製以獲得相同的基於速度的效果(在真正的凍結窗口上移動的速度越快,原始窗口越多,出現的越慢,移動越慢你得到的只是一個純色,等等......) – Peter
這實際上很聰明。我打算寫一個關於實際效果的答案,使用帶有手動(和錯誤)窗口繪圖的經典Windows消息循環,但是這個...我更喜歡這個:) –
當您繪製新位置時,請停止清除屏幕緩衝區。 – asawyer
最簡單的方法就是運行Windows。它不可避免地發生在某個時刻。 –
實例化一大堆窗口XD –