jer*_*one 1 c# pinvoke wndproc winforms
我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我没有在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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |