你知道什么时候你有一个被冻结的窗口,但是当你在顶部拖动另一个窗口时会留下一条痕迹?有时它看起来有点像Windows 3的Solitaire结束:)当你完成后(比如我的截图)。
我想创建一个C#windows(winforms / wpf)应用程序,它创建一个像这样的表面并允许我捕获图像,但我有点不知道从哪里开始。
照片:
答案 0 :(得分:6)
使用 WPF 会更容易。您可以从任何控件创建VisualBrush
,包括Window
或FrameworkElement
。获得VisualBrush
之后,您可以在表单上绘制它,它将创建相同的效果。或者,如果您想使用图片而不是UI元素,则可以使用ImageBrush
。
当你画画时,每次只偏移几张X / Y,看起来就像是覆盖它(呃......过度画画?)本身!
您可以创建自己的类FrozenVisualHost
,该类FrameworkElement
派生自DrawingVisual
以托管您呈现的FrozenVisualHost.OnRender()
。请参阅:MSDN: Using DrawingVisual Objects
覆盖MouseMove
方法可以在录制鼠标移动时(通过InvalidateVisual()
)绘制“冻结快照”。只需确保调用VisualBrush
方法来更新主机控件。
一个警告:从窗口创建Bitmap
不会捕获标题栏或窗口边框镶边。如果您需要,则必须手动获取快照(GDI):As described here。您可以将ImageBrush
用于{{1}},并进行类似的渲染。