我有一个旧的颜色选择器实用程序,用c ++写的,我多年前编写过,想要用c#重写。
我实现了全局钩子来从屏幕上挑选像素等等。一切都好,但是......
一旦鼠标移出窗体并进入桌面,十字光标将恢复为指针。我的c ++代码(实际上是MFC)不会发生这种情况。
如何在c#中完成?
谢谢大家。
(我使用此http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C作为挂钩)
答案 0 :(得分:0)
解决方案(或解决方法)是模拟鼠标单击事件的第一部分。这会将鼠标锁定在调用窗口上,从而保留所选的光标。
[DllImport( "user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall )]
public static extern void mouse_event( uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo );
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
然后在代码中启用鼠标捕获后:
mouse_event(
MOUSEEVENTF_LEFTDOWN,
(uint)Cursor.Position.X,
(uint)Cursor.Position.Y,
0,
0 );
this.Cursor = Cursors.Cross;
希望它有所帮助。