手动设置活动外包矩形功能

This commit is contained in:
YukkuriC 2023-09-05 22:59:30 +08:00 committed by ZouJin
parent 5ea3d2d90b
commit e6051e04f5
4 changed files with 64 additions and 23 deletions

View File

@ -16,38 +16,30 @@ namespace VPet_Simulator.Windows
this.mw = mw;
}
private bool _screenDetected = false;
private Rectangle _screenBorder;
private bool _isPrimaryScreen = true;
public bool IsPrimaryScreen
private static Rectangle _screenBorder;
private static bool _isPrimaryScreen = true;
public static bool IsPrimaryScreen
{
get
{
if(!_screenDetected) DetectCurrentScreen();
return _isPrimaryScreen;
}
}
public Rectangle ScreenBorder
public static Rectangle ScreenBorder
{
get
{
if (!_screenDetected) DetectCurrentScreen();
return _screenBorder;
}
set
{
_screenBorder = value;
_isPrimaryScreen = false;
}
}
private void DetectCurrentScreen()
public static void ResetScreenBorder()
{
var windowInteropHelper = new WindowInteropHelper(mw);
var currentScreen = Screen.FromHandle(windowInteropHelper.Handle);
// TODO 多屏+非100%缩放下以上API跟Left、Top一样都是错的
_isPrimaryScreen = currentScreen.Primary;
_screenBorder = currentScreen.Bounds;
_screenDetected = true;
}
public void ClearScreenBorderCache()
{
_screenDetected = false;
_isPrimaryScreen = true;
}
public double GetWindowsDistanceLeft()
@ -92,7 +84,6 @@ namespace VPet_Simulator.Windows
{
mw.Left += X * ZoomRatio;
mw.Top += Y * ZoomRatio;
ClearScreenBorderCache();
});
}

View File

@ -655,7 +655,6 @@ namespace VPet_Simulator.Windows
Main.DisplayToNomal();
Left = (SystemParameters.PrimaryScreenWidth - Width) / 2;
Top = (SystemParameters.PrimaryScreenHeight - Height) / 2;
(Core.Controller as MWController).ClearScreenBorderCache();
}));
m_menu.MenuItems.Add(new MenuItem("反馈中心".Translate(), (x, y) => { new winReport(this).Show(); }));
m_menu.MenuItems.Add(new MenuItem("开发控制台".Translate(), (x, y) => { new winConsole(this).Show(); }));

View File

@ -377,6 +377,8 @@
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<pu:Switch x:Name="CalFunctionBox" Grid.Column="2" Background="Transparent"
BorderBrush="{DynamicResource PrimaryDark}" BoxHeight="18" BoxWidth="35"
@ -404,7 +406,7 @@
<ComboBoxItem Content="Ill" />
</ComboBox>
</Grid>
<Grid Grid.Row="5" Grid.RowSpan="2" Grid.Column="2">
<Grid Grid.Row="5" Grid.RowSpan="4" Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
@ -491,7 +493,37 @@
</ComboBoxItem>
</ComboBox>
</Grid>
<Grid Grid.Row="7" Grid.RowSpan="2" Grid.Column="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="35" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{ll:Str '当前区域:'}"/>
<TextBlock Grid.Column="1" Grid.ColumnSpan="2" Text="{ll:Str '主屏幕'}"/>
<Button x:Name="BtnSetScreen_Default" Grid.Row="1" Grid.Column="0" Margin="5,5,5,5" Padding="1"
pu:ButtonHelper.CornerRadius="4" Background="{DynamicResource SecondaryLight}"
Click="BtnSetScreen_Default_Click" Content="{ll:Str 重置为主屏}"/>
<Button x:Name="BtnSetScreen_DetectScreen" Grid.Row="1" Grid.Column="1" Margin="5,5,5,5" Padding="1"
pu:ButtonHelper.CornerRadius="4" Background="{DynamicResource SecondaryLight}"
Click="BtnSetScreen_DetectScreen_Click" Content="{ll:Str 设为桌宠屏幕}"
ToolTip="{ll:Str 当屏幕分辨率不为100%时可能识别有误}"/>
<Button x:Name="BtnSetScreen_Window" Grid.Row="1" Grid.Column="2" Margin="5,5,5,5" Padding="1"
pu:ButtonHelper.CornerRadius="4" Background="{DynamicResource SecondaryLight}"
Click="BtnSetScreen_Window_Click" Content="{ll:Str 设为窗口范围}">
<Button.ToolTip>
<TextBlock>
<TextBlock Text="{ll:Str 使用设置窗口框选范围后点击}"/>
<LineBreak />
<TextBlock Text="{ll:Str 注:双击顶端可最大化设置页}"/>
</TextBlock>
</Button.ToolTip>
</Button>
</Grid>
<TextBlock Grid.Row="0" VerticalAlignment="Center" Text="{ll:Str 数据计算}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Text="{ll:Str 显示状态}" />
<TextBlock Grid.Row="5" VerticalAlignment="Center" Text="{ll:Str 桌宠移动}" />

View File

@ -615,6 +615,25 @@ namespace VPet_Simulator.Windows
}
}
private void BtnSetScreen_Default_Click(object sender, RoutedEventArgs e)
{
MWController.ResetScreenBorder();
}
private void BtnSetScreen_DetectScreen_Click(object sender, RoutedEventArgs e)
{
var windowInteropHelper = new System.Windows.Interop.WindowInteropHelper(mw);
var currentScreen = System.Windows.Forms.Screen.FromHandle(windowInteropHelper.Handle);
MWController.ScreenBorder = currentScreen.Bounds;
}
private void BtnSetScreen_Window_Click(object sender, RoutedEventArgs e)
{
MWController.ScreenBorder = new System.Drawing.Rectangle(
(int)Left, (int)Top,
(int)Width, (int)Height
);
}
private void hyper_moreInfo(object sender, RoutedEventArgs e)
{