Я реализовал пользовательское изменение размера в приложении (чтобы исправить отсутствие рендеринга во время изменения размера), и иногда после изменения размера курсор начинает мерцать.
Курсор установлен следующим образом:
public enum CursorCode {
...
}
public static CursorCode current = CursorCode.Default;
public static void SetCursor ( CursorCode code ) {
current = code;
switch ( code ) {
case CursorCode.ResizeNWSE:
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.SizeNWSE;
break;
...
}
}
Это не вызвано, чтобы быть установленным к чему-то другому, чем я хочу.Он вызывается каждый кадр (до current
) и обновляется.Мерцает только и только когда я двигаю мышью.Когда я отдыхаю, он остается равным current
.
Размер окна изменяется таким образом:
var mx = beginX + Input.mouseX;
var my = beginY + Input.mouseY;
if ( toResize.Contains( Side.Right ) ) {
graphics.PreferredBackBufferWidth = Math.Min( Math.Max( mx, 50 ), dragWindow.area.Width );
}
if ( toResize.Contains( Side.Bottom ) ) {
graphics.PreferredBackBufferHeight = Math.Min( Math.Max( my, 50 ), dragWindow.area.Height );
}
if ( toResize.Contains( Side.Top ) ) {
var h = graphics.PreferredBackBufferHeight;
graphics.PreferredBackBufferHeight = Math.Min( Math.Max( my - Input.mouseY * 2, 50 ), dragWindow.area.Height );
var delta = h - Math.Min( Math.Max( my - Input.mouseY * 2, 50 ), dragWindow.area.Height );
Window.Position = new Point( Window.Position.X, Window.Position.Y + delta );
beginY -= delta;
}
if ( toResize.Contains( Side.Left ) ) {
var w = graphics.PreferredBackBufferWidth;
graphics.PreferredBackBufferWidth = Math.Min( Math.Max( mx - Input.mouseX * 2, 50 ), dragWindow.area.Width );
var delta = w - Math.Min( Math.Max( mx - Input.mouseX * 2, 50 ), dragWindow.area.Width );
Window.Position = new Point( Window.Position.X + delta, Window.Position.Y );
beginX -= delta;
}
graphics.ApplyChanges();
После того, как я завершу изменение размера, проблема не исчезнет.Так не бывает всегда.