我有一个 WinForm,现在我需要在光标位于窗口标题部分时更改光标。我有一些代码正在运行,它有两个问题:
-
当光标位于边缘时,它还会更改光标(应显示正常的调整大小光标)。
我发现我需要这样的东西
WM_NCHITTEST
& HTTOP
,但是我该如何结合呢?
- 鼠标移动的时候有一点闪烁。
我还尝试将代码放在下面base.WndProc(ref m);
.
这是我已经拥有的代码:
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;
}
}
EDIT:
我没有在 Spy++ 中正确记录消息。找到了窗口边缘的解决方案(请参阅更新的代码)。
Thnx, J
它闪烁是因为您使用了错误的消息。任何鼠标移动都会跟随 WM_SETCURSOR 以允许应用程序更改光标。因此光标变回默认值。而是拦截 WM_SETCURSOR。 LParam 的低位字包含命中测试代码。
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)