gpt4 book ai didi

c# - GetCursorInfo WinForms 与 WPF C#

转载 作者:行者123 更新时间:2023-11-30 16:40:34 24 4
gpt4 key购买 nike

我在将我的代码片段从 WinForms 转移到 WPF 以更好地控制 UI 时遇到了问题。

以下代码片段在 WinForms 中返回 True 但在 WPF 中返回 False。我怀疑 WPF 面板对光标有影响,所以我尝试最小化启动应用程序但它仍然失败。由于 GetCursorInfo 是 PInvoke,我认为它在编程语言中的工作方式应该相同。对此有何建议?

    private CURSORINFO ci;

[StructLayout(LayoutKind.Sequential)]
public struct CURSORINFO
{
public Int32 cbSize; // Specifies the size, in bytes, of the structure.
public Int32 flags; // Specifies the cursor state.
public IntPtr hCursor; // Handle to the cursor.
Point point; // Should already marshal correctly.
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorInfo(ref CURSORINFO pci);

public MainWindow()
{
InitializeComponent();

ci = new CURSORINFO();

ci.cbSize = Marshal.SizeOf(ci);

MessageBox.Show(GetCursorInfo(ref ci).ToString());
}

最佳答案

    Point point; // Should already marshal correctly.

事实并非如此。适用于 System.Drawing.Point 但不适用于 System.Windows.Point,WPF 类型对 X 和 Y 成员使用 double。所以 CURSORINFO.cbSize 会太大,足以让您收到错误 87(“参数不正确”),它太大了。

要么输入全名。或者,如果您不想添加对 System.Drawing 的引用,只需自己声明 POINT 结构。并且不要忘记返回的信息使用像素作为单位,您通常希望 convert to inches在 WPF 应用程序中。

关于c# - GetCursorInfo WinForms 与 WPF C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51115996/

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