#winapi #mouse
#winapi #мышь
Вопрос:
Есть ли способ измерить, отображается ли текущее изображение мыши, что оно находится в режиме изменения размера?
Я создаю горизонтальный слайдер, который является просто подклассом static (label). Когда пользователь наводит курсор мыши на ползунок (статический элемент управления) и нажимает и удерживает левую кнопку мыши нажатой (wm_lbuttondown) Я вызываю функцию setcapture окна. Затем я вызываю releasecapture, когда пользователь отпускает кнопку мыши (wm_lbuttonup). Моя подклассовая процедура статического управления называется onevent_label . WndProc обрабатывает сообщения для всего остального.
Ползунок работает хорошо, за исключением случаев, когда вы завершаете один слайд, а затем сразу щелкаете мышью, чтобы запустить 2-й слайд, без предварительного перемещения мыши в другую область или щелчка мышью по другому элементу управления.
Я определил, что проблема вызвана тем, что 2-й щелчок, событие wm_lbuttondown, запускается в wndproc (не onevent_label). Изображение мыши, похоже, все время находится в режиме изменения размера, однако я измеряю положение мыши в процедуре wm_lbuttondown в wndproc и вижу, что оно находится на один пиксель слева от моего статического элемента управления label, ползунка.
Простое решение — просто отправить сообщение wm_lbuttondown статическому элементу управления, однако я хотел бы сделать процедуру wm_lbuttondown wndproc разумной и пересылать сообщение только при необходимости.
Я решил, что лучший способ сделать это — проверить, по-прежнему ли Windows отображает, что мышь находится в режиме изменения размера, и что положение курсора достаточно близко к статической метке.
Кажется, я не могу найти способ измерить, является ли изображение мыши указателем (обычный случай) или показывает, что он хочет изменить размер элемента управления (стрелки вправо и влево по горизонтали).
План B состоит в том, Чтобы пересылать сообщение только в том случае, если положение мыши находится в пределах одного или двух пикселей от ползунка. В идеальном мире я хотел бы знать, что мышь отображает изображение с горизонтальным изменением размера и находится в пределах одного или двух пикселей от ползунка.
Мысли? Комментарии? Есть ли у меня способ определить, отображает ли мышь изображение с горизонтальным изменением размера?
Заранее спасибо.
Комментарии:
1.Кто устанавливает режим отображения изображения мыши
resize
? Если это было за границей окна, кто-то другой мог захватить мышь в этот момент. Вы можете проверить это с помощьюGetCapture
learn.microsoft.com/en-us/windows/win32/api/winuser /…2. Я понял, что создал эту проблему для себя, не сбросив курсор (на IDC_ARROW) после того, как закончил его использовать. К вашему сведению, другие, которые натыкаются на этот вопрос: я использовал gcl_hcursor и idc_sizewe для изменения размера курсора по горизонтали и пренебрег использованием gcl_hcursor и idc_arrow для сброса. Для вертикального ползунка используйте idc_sizens и сбросьте значение idc_arrow .
Ответ №1:
Re: Is there a way for me to determine if the mouse is displaying its horizontal resize image?
— вот как вы можете это сделать:
HCURSOR h = LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE));
CURSORINFO ci = {sizeof CURSORINFO };
GetCursorInfo(amp;ci);
и сравните h
с ci.hCursor
. Здесь перечислены все стандартные курсоры: https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadcursora