Появляются сообщения о том, что окна WinAPI украдены плагином — как это исправить?

Прежде всего, некоторые ссылки (для тех, кто хочет попробовать сами): я загружаю Proteus VX VST плагин в мой хозяин, OpenMPT. Плагин работает просто отлично, однако кажется, что он крадет некоторые оконные сообщения, так что нажатие на меню, созданное хостом, или даже нажатие кнопки закрытия не имеет никакого эффекта. Нажатие на кнопку закрытия даже не запускает анимацию «нажатие кнопки», поэтому Windows, вероятно, не получает никаких сообщений, касающихся действий окна. Я знаю, что другие хосты VST, такие как Renoise, не имеют этой проблемы (нажатие кнопки закрытия окна прекрасно работает там), поэтому должен быть способ избежать этого.

Я подозреваю, что Proteus VX устанавливает несоответствующий оконный процесс, который, вероятно, забывает вызывать собственный оконный процесс MFC (и, возможно, также не вызывает DefWindowProc), но я понятия не имею, как это выяснить, не говоря уже о том, как это исправить. Я попытался сохранить исходный файл GWL_WNDPROC перед тем, как открыть окно плагина, а затем восстановить этот процесс сразу после отображения редактора, но это не помогает.

Редактировать: Плагин обязательно должен сделать что-то хитрое; прежде чем позволить ему что-то делать с моим окном, я сохраняю оригинальный WindowProc, используя

windowProc = GetWindowLongPtr(m_hWnd, GWL_WNDPROC);

и восстановите его после того, как плагин завершит свой бизнес инициализации окна, используя

SetWindowLongPtr(m_hWnd, GWL_WNDPROC, windowProc);

Это позволяет мне использовать мои собственные меню и кнопку окна [x], пока я немного не покопаюсь в плагине GUI; Я полагаю, что плагин перезаписывает процесс окна снова как только он получит фокус ввода.

2

Решение

На тот случай, если кто-то наткнется на это, решением было не разместить графический интерфейс VST прямо в моем собственном окне. Вместо этого я помещаю статическую метку в это окно и затем говорю VST использовать эту метку в качестве родителя.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]