Интеграция пользовательского элемента управления в систему обработки сообщений Windows.

Этот вопрос касается внутреннего устройства системы обмена сообщениями Windows. Все мы знаем, что на самом низком уровне все элементы управления получают сообщения от системы Windows. Каждое приложение имеет свой собственный цикл сообщений, где оно их обрабатывает. Я не нашел хорошего описания внутреннего устройства, но я предполагаю, что в Windows есть стек элементов управления, и когда, например, пользователь щелкает окно, ОС перебирает все элементы управления, чтобы проверить, в какой области была мышь, когда был сделан щелчок. Конкретное окно получает сообщение.

Итак, у меня есть два вопроса

Окна всегда прямоугольной формы? Я имею в виду, могу ли я нарисовать пользовательский элемент управления (круглую кнопку) и сообщить подсистеме обмена сообщениями ОС, чтобы она проверяла щелчок мыши по этой круглой форме.

Есть ли у окна легальный интерфейс API для добавления пользовательских элементов управления в его подсистему?

Я знаю, что все окна создаются с помощью функции API CreateWindow. Для этой функции требуется имя класса. Это означает, что ОС Windows имеет список предопределенных классов. Можно ли добавить новый класс?

Есть некоторые библиотеки GUI, которые используют настраиваемые элементы управления (например, для музыкальных плагинов VST), но они сами реализуют проверку того, была ли мышь нажата внутри их области. Было бы неплохо переместить это в область ОС, поскольку мы знаем, что система обмена сообщениями Windows работает быстро, потому что работает с более высоким уровнем приоритета. Спасибо


person zulunation    schedule 26.10.2020    source источник


Ответы (1)


Окна всегда прямоугольной формы?

Нет. Вы можете вызвать SetWindowRgn. .

Есть ли у окна легальный интерфейс API для добавления пользовательских элементов управления в его подсистему?

Конечно, вы можете зарегистрировать свой пользовательский класс окна, используя РегистрклассEx.

person IInspectable    schedule 26.10.2020