C# 更改窗口标题中的光标

C# 更改窗口标题中的光标,c#,winforms,pinvoke,wndproc,C#,Winforms,Pinvoke,Wndproc,我有一个WinForm,现在需要在windows标题部分中更改光标。我有一些代码正在工作,它有两个问题: 当光标位于边上时,它也会更改光标(应显示“正常调整大小”光标)。 我发现我需要这样的东西WM\u nchitest&HTTOP,但我如何组合 移动鼠标时有些闪烁 我还尝试将代码放在base.WndProc(refm)下面 这是我已有的代码: if ((m.Msg == Win32.WM.NCMOUSEMOVE || m.Msg == Win32.WM.NCLBUTTONDOWN |

我有一个WinForm,现在需要在windows标题部分中更改光标。我有一些代码正在工作,它有两个问题:

  • 当光标位于边上时,它也会更改光标(应显示“正常调整大小”光标)。 我发现我需要这样的东西
    WM\u nchitest
    &
    HTTOP
    ,但我如何组合
  • 移动鼠标时有些闪烁
  • 我还尝试将代码放在
    base.WndProc(refm)下面

    这是我已有的代码:

    if ((m.Msg == Win32.WM.NCMOUSEMOVE
        || m.Msg == Win32.WM.NCLBUTTONDOWN || m.Msg == Win32.WM.NCLBUTTONUP
        || m.Msg == Win32.WM.NCRBUTTONDOWN || m.Msg == Win32.WM.NCRBUTTONUP)
    )
    {
        if (m.WParam.ToInt32() != Win32.HT.TOP && m.WParam.ToInt32() != Win32.HT.RIGHT && m.WParam.ToInt32() != Win32.HT.BOTTOM && m.WParam.ToInt32() != Win32.HT.LEFT)
        {
            Cursor = Cursors.Hand;
        }
    }
    
    编辑:
    我没有在Spy++中正确记录消息。找到了窗口边缘的解决方案(请参见更新的代码)


    Thnx,J

    它会闪烁,因为您使用了错误的消息。任何鼠标移动之后都会出现WM_SETCURSOR,以允许应用程序更改光标。因此,光标将变回默认值。截取WM_SETCURSOR。LPRAM的低位字包含命中测试代码

        protected override void WndProc(ref Message m) {
            if (m.Msg == 0x20) {  // Trap WM_SETCUROR
                if ((m.LParam.ToInt32() & 0xffff) == 2) { // Trap HTCAPTION
                    Cursor.Current = Cursors.Hand;
                    m.Result = (IntPtr)1;  // Processed
                    return;
                }
            }
            base.WndProc(ref m);
        }
    

    它会闪烁,因为您使用了错误的消息。任何鼠标移动之后都会出现WM_SETCURSOR,以允许应用程序更改光标。因此,光标将变回默认值。截取WM_SETCURSOR。LPRAM的低位字包含命中测试代码

        protected override void WndProc(ref Message m) {
            if (m.Msg == 0x20) {  // Trap WM_SETCUROR
                if ((m.LParam.ToInt32() & 0xffff) == 2) { // Trap HTCAPTION
                    Cursor.Current = Cursors.Hand;
                    m.Result = (IntPtr)1;  // Processed
                    return;
                }
            }
            base.WndProc(ref m);
        }
    

    假装窗口标题部分怎么样?只是一个想法。我已经将窗口标题部分扩展到下面,以允许玻璃透明。除此之外,我还画了一些东西,但我不知道如何正确地更改整个标题上的鼠标光标。那么假装窗口标题部分呢?只是一个想法。我已经将窗口标题部分扩展到下面,以允许玻璃透明。除此之外,我还画了一些东西,但我不知道如何在整个caption.Thnx上正确地更改鼠标光标。Aldo这修复了我的闪烁,这确实部分地启用了另一个“bug”。只显示顶部和左上角的调整大小光标。这似乎与您发布的代码片段无关。我得到了很好的调整大小光标的所有边缘和角落的片段,我张贴。测试命中测试代码是必要的,边缘和角落有一个不同的命中代码,它不会是2。抱歉是我的错误转换它。谢谢你的回答。Aldo这修复了我的闪烁,这确实部分地启用了另一个“bug”。只显示顶部和左上角的调整大小光标。这似乎与您发布的代码片段无关。我得到了很好的调整大小光标的所有边缘和角落的片段,我张贴。测试命中测试代码是必要的,边缘和角落有一个不同的命中代码,它不会是2。抱歉是我的错误转换它。谢谢你的回答