gpt4 book ai didi

c# - 在显示我的 C# Windows 窗体时关闭 'Show window contents while dragging' 设置

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

有一个名为“拖动时显示窗口内容”的窗口显示设置。

http://www.thewindowsclub.com/disable-show-windows-contents-while-dragging

启用此设置后,如果您拖动一个窗口,该窗口将立即在新位置重新绘制。如果您调整窗口大小,它会立即为每个新窗口大小重新绘制窗口,即使您仍然按住鼠标按钮也是如此。

当设置关闭时,拖动窗口或调整窗口大小只会显示新窗口位置或大小的轮廓,直到您释放鼠标按钮,然后它将在新位置或大小绘制窗口。

我想在关闭“拖动时显示窗口内容”设置的 C# WinForms 应用程序中显示我的表单。然而,由于这是一个操作设置,我希望它只在我的表单显示时有效,而不管操作系统中的设置是什么。

有没有一种方法可以使用一些 WinAPI 调用来专门针对我的 winform 更改行为?

如果没有,有没有一种方法可以在我的表单显示之前以编程方式更改设置并在我的表单关闭后重置它?执行此更改是否需要管理员权限(因为我不想那样)?

最佳答案

下面的代码将使用系统设置的'Show window content while dragging'来重新定位窗口,同时它会暂时将其设置为关闭,同时调整窗口大小然后将其设置回系统设置。

这使您可以在 Windows 窗体中自由调整窗体大小。

由于此属性是修改 HKEY_CURRENT_USER\Control Panel\Desktop\DragFullWindows 注册表项的用户设置,因此它不需要管理员权限。

    [DllImport("user32.dll", EntryPoint = "SystemParametersInfo", CharSet = CharSet.Auto)]
public static extern int GetSystemParametersInfo(int uAction, int uParam, out int lpvParam, int fuWinIni);

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", CharSet = CharSet.Auto)]
public static extern int SetSystemParametersInfo(int uAction, int uParam, int lpvParam, int fuWinIni);

private const int SPI_GETDRAGFULLWINDOWS = 38;
private const int SPI_SETDRAGFULLWINDOWS = 37;

private const int WM_SYSCOMMAND = 0x0112;
private const int SC_SIZE = 0xF000;

//change 'Show window content while dragging' to false while resizing
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND && (m.WParam.ToInt32() & 0xfff0) == SC_SIZE)
{
int isDragFullWindow;
GetSystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, out isDragFullWindow, 0);

if (isDragFullWindow != 0)
SetSystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 0, 0, 0);

base.WndProc(ref m);

if (isDragFullWindow != 0)
SetSystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 1, 0, 0);
}
else
{
base.WndProc(ref m);
}
}

//reduce control flickering and black stripes when window is resized
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}

关于c# - 在显示我的 C# Windows 窗体时关闭 'Show window contents while dragging' 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29548479/

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