C# 窗口拖动尺寸大小鼠标闪动,拖动不方便
时间: 2023-08-02 07:16:59 浏览: 90
C# 窗口拖动尺寸大小时鼠标会闪动是因为窗口正在进行重绘操作,这可能会导致拖动不方便。为了解决这个问题,你可以使用以下方法:
1. 设置窗口的双缓冲,以减少窗口重绘的次数。
```csharp
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.UserPaint, true);
```
2. 在窗口的 `ResizeBegin` 和 `ResizeEnd` 事件中,禁用和启用窗口的重绘。
```csharp
private void Form1_ResizeBegin(object sender, EventArgs e)
{
this.SuspendLayout();
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
this.ResumeLayout();
}
```
这样就可以避免窗口在拖动时闪动,提高用户体验。
相关问题
C# 窗口拖动定位时鼠标闪动,很难定位拖动
这个问题可能是由于鼠标跟随窗口移动导致的。你可以尝试禁用鼠标跟随功能来解决这个问题。以下是一种可能的解决方案:
1. 在窗口类的构造函数中添加以下代码:
```csharp
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
```
这将启用双缓冲和所有绘图操作在窗口消息处理程序中进行。
2. 在窗口类中添加以下变量:
```csharp
private const int WM_NCHITTEST = 0x0084;
private const int HTCLIENT = 0x01;
private const int HTCAPTION = 0x02;
```
这些变量将用于确定鼠标指针在窗口的哪个部分。
3. 重写窗口的 WndProc 方法:
```csharp
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCHITTEST:
base.WndProc(ref m);
if (m.Result.ToInt32() == HTCLIENT)
m.Result = new IntPtr(HTCAPTION);
return;
}
base.WndProc(ref m);
}
```
这将覆盖默认的窗口消息处理程序并允许拖动窗口时正常移动鼠标指针。
这些步骤应该可以解决闪烁问题并使窗口拖动更加精确。
阅读全文