创建“冻结窗口”效果

时间:2013-01-18 21:49:05

标签: c# wpf winforms

你知道什么时候你有一个被冻结的窗口,但是当你在顶部拖动另一个窗口时会留下一条痕迹?有时它看起来有点像Windows 3的Solitaire结束:)当你完成后(比如我的截图)。

我想创建一个C#windows(winforms / wpf)应用程序,它创建一个像这样的表面并允许我捕获图像,但我有点不知道从哪里开始。

照片: Almost looks like Solitaire

1 个答案:

答案 0 :(得分:6)

使用 WPF 会更容易。您可以从任何控件创建VisualBrush,包括WindowFrameworkElement。获得VisualBrush之后,您可以在表单上绘制它,它将创建相同的效果。或者,如果您想使用图片而不是UI元素,则可以使用ImageBrush

当你画画时,每次只偏移几张X / Y,看起来就像是覆盖它(呃......过度画画?)本身!

您可以创建自己的类FrozenVisualHost,该类FrameworkElement派生自DrawingVisual以托管您呈现的FrozenVisualHost.OnRender()。请参阅:MSDN: Using DrawingVisual Objects

覆盖MouseMove方法可以在录制鼠标移动时(通过InvalidateVisual())绘制“冻结快照”。只需确保调用VisualBrush方法来更新主机控件。

一个警告:从窗口创建Bitmap不会捕获标题栏或窗口边框镶边。如果您需要,则必须手动获取快照(GDI):As described here。您可以将ImageBrush用于{{1}},并进行类似的渲染。