У меня есть кнопка на WinForm (c#), и когда она нажата (мышь вниз, затем вверх), я бы хотел изменить курсор мыши на пользовательский значок. Мне бы хотелось, чтобы этот пользовательский значок курсора оставался независимо от положения мыши в области экрана (над исходным приложением, другими приложениями, рабочим столом и т. Д. c.) До тех пор, пока мышь не будет нажата (мышь вниз, затем вверх). После этого второго щелчка я хочу, чтобы курсор вернулся к своему поведению по умолчанию.
В настоящее время я использую метод глобальной ловушки мыши , описанный Дэном Силком (с поправкой от Ханса Пассанта) для захвата глобальных событий перемещения и щелчка мыши.
Я думаю, что мне нужно перехватить (и впоследствии остановить) сообщения WM_SETCURSOR (которые согласно Гансу следуют за любым движением мыши). Однако я не уверен, как это сделать для вещей, помимо исходного приложения, которое Реза Агаи выделил следующим образом:
const int WM_SETCURSOR = 0x0020;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SETCURSOR)
Cursor.Current = myCustomCursor;
else
base.WndProc(ref m);
}
Когда я пытался использовать вышеописанный метод WndProc
для настройки курсора только для исходного приложения у меня все еще мерцание курсора. Есть ли правильный способ остановить отправку / отправку сообщений WM_SETCURSOR?
Любая помощь или предложения будут наиболее полезны!
ОБНОВЛЕНИЕ
Я решил go решить мою проблему под другим углом, чтобы полностью не бороться с сообщениями WM_SETCURSOR. То, что у меня сейчас есть, работает нормально, однако, если там есть ответ, вы можете опубликовать его для будущих поколений.