Создайте окно, используя флаг WS_EX_NOACTIVATE, но его нельзя перетаскивать, пока я не отпущу мышь

Я создал окно, используя флаг WS_EX_NOACTIVATE, и оно прекрасно работает, если не щелкать мышью при нажатии на окно. Однако, когда я перетаскиваю окно или пытаюсь изменить его размер, оно не перерисовывает окно, когда вы перемещаете и изменяете его размер, только в самом конце, как только вы отпустите кнопку мыши. Это можно обойти? Я хотел бы видеть окно, поскольку я изменяю его размер. Я искал много документов, но до сих пор не могу найти решение …

2

Решение

Это ошибка Windows. Вам нужно позвонить SetWindowPos(hwnd, 0, x, y, width, height, 0) на WM_MOVING, Координаты для установки даны вам в lParam который является RECT*,

Обратите внимание, что при этом активируется собственное окно и деактивируется владелец, а это не то, что вам нужно (и SWP_NOACTIVATE не имеет никакого эффекта).

Чтобы избежать этого, вам нужно установить WS_CHILD в собственном окне. Но установите это после Вы создали окно через SetWindowLong (), иначе ваше собственное окно будет обрезано, как любое дочернее окно.

И, как вы, наверное, уже поняли, это работает только для Windows с WS_EX_TOOLWINDOW бывший стиль. Я не смог отключить собственное окно с помощью любой другой комбинации стилей, которая не включает WS_EX_TOOLWINDOW,

Это для тебя Винапи 🙁

1

Другие решения

Если вам нужно окно, которое не фокусируется при нажатии, но с которым все еще можно взаимодействовать, вам нужно обработать WM_MOUSEACTIVATE, и вернуться MA_NOACTIVATE,

Дополнительная информация и полностью рабочий пример кода были опубликованы Раймондом Ченом. Увидеть Как я могу иметь окно, которое отклоняет активацию, но все еще получает указатель ввода?

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector