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

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

View File

@ -655,7 +655,6 @@ namespace VPet_Simulator.Windows
Main.DisplayToNomal(); Main.DisplayToNomal();
Left = (SystemParameters.PrimaryScreenWidth - Width) / 2; Left = (SystemParameters.PrimaryScreenWidth - Width) / 2;
Top = (SystemParameters.PrimaryScreenHeight - Height) / 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 winReport(this).Show(); }));
m_menu.MenuItems.Add(new MenuItem("开发控制台".Translate(), (x, y) => { new winConsole(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" /> <RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<pu:Switch x:Name="CalFunctionBox" Grid.Column="2" Background="Transparent" <pu:Switch x:Name="CalFunctionBox" Grid.Column="2" Background="Transparent"
BorderBrush="{DynamicResource PrimaryDark}" BoxHeight="18" BoxWidth="35" BorderBrush="{DynamicResource PrimaryDark}" BoxHeight="18" BoxWidth="35"
@ -404,7 +406,7 @@
<ComboBoxItem Content="Ill" /> <ComboBoxItem Content="Ill" />
</ComboBox> </ComboBox>
</Grid> </Grid>
<Grid Grid.Row="5" Grid.RowSpan="2" Grid.Column="2"> <Grid Grid.Row="5" Grid.RowSpan="4" Grid.Column="2">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
@ -491,7 +493,37 @@
</ComboBoxItem> </ComboBoxItem>
</ComboBox> </ComboBox>
</Grid> </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="0" VerticalAlignment="Center" Text="{ll:Str 数据计算}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Text="{ll:Str 显示状态}" /> <TextBlock Grid.Row="1" VerticalAlignment="Center" Text="{ll:Str 显示状态}" />
<TextBlock Grid.Row="5" 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) private void hyper_moreInfo(object sender, RoutedEventArgs e)
{ {