У меня есть небольшое приложение, которое показывает полупрозрачное окно на весь рабочий стол.Окно не отображается на панели задач и не имеет заголовка
. В этом окне пользователь может перетащить прямоугольник мышью.Когда кнопка мыши отпущена, делается снимок экрана с данной областью.(Что-то похожее на инструмент для разрезания в windows 7)
Для этого в окне содержится RectangleGeometry.
Теперь в событии CompositionTarget.Rendering прямоугольник, в котором указывается место, где находитсяМышь была, когда мышь находилась внизу, она также имеет размер, чтобы охватить область до текущей позиции мыши.
Это работает очень хорошо, если подключен только один монитор.При подключении второго монитора с более высоким разрешением производительность резко снижается.
Разрешение дисплея ноутбука составляет 1600x1200
Подключенный дисплей имеет разрешение 1900x1200
Также приподключив дисплей, он изменил основной экран на новый
Вот определение окна
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
AllowsTransparency="True" Background="Transparent" WindowStyle="None" >
the geometry definition
<Path Fill="Black" Opacity="0.4" Stroke="Red" StrokeThickness="3">
<Path.Data>
<RectangleGeometry x:Name="Inner" Rect="105,5,90,90"/>
</Path.Data>
</Path>
Здесь часть кода, которая перемещает прямоугольник
System.Windows.Rect location = new System.Windows.Rect(this.DragStart.X, this.DragStart.Y, width, height);
this.Inner.Rect = rect;
У кого-нибудь есть идеи, как улучшить производительность?«Нормально» ли это, что производительность сильно снижается при высоких разрешениях на нескольких дисплеях?