Я подозреваю, что проблема связана с этим замечанием в документации :
Если приложение отправляет сообщение WM_SETREDRAW
в скрытое окно, окно становится видимым (то есть операционная система добавляет стиль WS_VISIBLE
к окну).
Поскольку скрытое окно эффективно отключено (хотя оно все еще может обрабатывать сообщения, оно не может получать пользовательский ввод), это приводит к тому, что вы запускаете неправильный порядок включения и выключения окон. Когда текущее окно с фокусом становится отключенным (и, следовательно, теряет фокус), фокус должен перемещаться куда-нибудь , потому что он не может быть нигде.
Трудно сказать точно , что происходит в вашем случае, не видя код. Я также не совсем уверен по вашему вопросу, отправляете ли вы сообщение WM_SETREDRAW
родительскому MDI или дочернему MDI. Но я могу сказать, что библиотеки скинов печально известны тем, что что-то напортачили и вызывают кошмарные ошибки. Спросите себя, действительно ли вам в первую очередь нужна такая вещь, и действительно ли она того стоит?
Я также должен подвергнуть сомнению основную мотивацию:
Когда я добавляю дочерние формы, я использую WM_SETREDRAW
, чтобы отключить рисование по соображениям производительности.
При добавлении дочерних форм не должно быть проблем с рисованием или производительностью при условии, что вы выполняете всю инициализацию внутри конструктора формы, а не каким-либо другим методом. Это гарантирует, что все будет правильно инициализировано до отображения формы, и нет необходимости в нескольких перерисовках. Все рисуется ровно один раз, при первом отображении формы, что в точности повторяется в идеальном случае с WM_SETREDRAW
: оно рисуется только один раз после включения перерисовки.