Я разрабатываю расширение для существующего приложения через COM.
Текущий интерфейс расширяемого приложения позволяет создавать собственные окна свойств и использовать их внутри этого приложения.
Теперь я использую .NET
для этой цели и у меня странные проблемы:
extensionForm = new Form();
extensionForm.SetBounds(0, 0, 100, 100);
extensionForm.Controls.Add(new Button());
ExApplAPI.AddCustomPropertyWindow(extensionForm.Handle.ToInt32(), "Ololo");
Как вы можете видеть ниже, листы свойств фактически расширяются , но после этого начинает происходить что-то странное.
Обычно, если я переключаюсь на вкладку Ololo
, затем возвращаюсь к любой из 3 других вкладок (Attributes
, Drawing
или Services
), приложение зависает. Я также знаю, что зависание происходит внутри некоторого неуправляемого блока кода.
Еще один интересный факт заключается в том, что если я не пишу extensionForm.Controls.Add(new Button())
(с вызовами макета приостановки / возобновления или без них) , , то все работает нормально. Итак, если Недавно построенная форма не имеет элементов управления (кнопок или любых других), она не останавливается.
Вот журнал Spy++
в окне Ololo
прямо перед остановкой (последнее сообщение - WM_CTLCOLORBTN
, сразу после этого приложение стало замороженным):
Объединяем все вместе:
- Замораживание происходит только в том случае, если я переключаюсь с
Ololo
на другую вкладку, а затем снова переключаюсь на вкладку Ololo
.
- Замораживание происходит только в том случае, если на интегрированной форме есть хотя бы один элемент управления, формы без элементов управления не замирают.
- В настоящее время приложение не выполняет какой-либо управляемый код и не тратит процессорное время.
Итак, какие-нибудь идеи / подобные проблемы решены / и т.д., чтобы помочь мне в этом случае?