gpt4 book ai didi

c# - GetWindowRect 不同于 Window.Left

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:11 24 4
gpt4 key购买 nike

我创建了一个小示例应用程序来说明我在使用 GetWindowRect 时遇到的问题。当我单击 Foo 按钮时,它显示 GetWindowRect 返回的 Left 值不同于 Window.Left

似乎 Window.Left 的返回值是相对的,但我不确定是什么。同样奇怪的是,我无法在每台机器上重现此问题,在带或不带额外显示器的家用笔记本电脑上我都可以重现此问题,在我的工作电脑上则不会出现此问题。两个系统都运行 Windows 7

为什么这些值不同,我该如何解决?

MainWindow.xaml.cs

using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;

namespace PositionTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private IntPtr thisHandle;
public MainWindow()
{
InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
thisHandle = new WindowInteropHelper(this).Handle;
}

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

private void ReportLocation(object sender, RoutedEventArgs e)
{
var rct = new RECT();
GetWindowRect(thisHandle, ref rct);

MessageBox.Show(Left.ToString() + " " + rct.Left);
}
}
}

MainWindow.xaml

<Window x:Class="PositionTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Loaded="Window_Loaded" WindowStartupLocation="Manual" Height="150" Width="150" WindowStyle="SingleBorderWindow" ResizeMode="NoResize" BorderThickness="0,1,0,0" >
<Grid>
<Button Content="Foo" HorizontalAlignment="Left" Margin="35,50,0,0" VerticalAlignment="Top" Width="75" Click="ReportLocation"/>
</Grid>
</Window>

最佳答案

您没有量化差异,有多种解释,但有一种明显不匹配。 Windows 和 WPF 使用不同的单位。 GetWindowRect() 以像素为单位返回窗口位置,Window.Left 以 1/96 英寸返回位置。当视频适配器未以每英寸 96 点的速度运行时,它们将不匹配。 96 dpi 是旧设置,在更高版本的 Windows 上很容易更改。 WPF 使得获取 dpi 设置有点困难,检查 this blog post用于代码。

关于c# - GetWindowRect 不同于 Window.Left,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com