sunzh
Зарегистрирован: 13.05.2006 Сообщения: 19
|
Добавлено: Ср Мар 04, 2015 10:36 pm Заголовок сообщения: Синхронизация фокуса переподчиненных окон карты через HWND |
|
|
Собственно как?
Простенькая вроде бы задача, завела в тупик.
Суть проблемы:
Есть PageControl в форме, которая может менять размер.
Во вкладках переподчиненные окна карты.
При обработке MoveWindow необходимо указать HWND активного окна.
НО, при переключении вкладок активизация переподчиненного окна не происходит, и функция MoveWindow получает HWND прошлого активного окна (расположенного на другой вкладке) и при изменении размера формы и расположенного в ней пейджконтрола, перерисовка текущего окна не происходит.
Пошел двумя путями:
Использовал в MoveWindow вместо Evaluate, GetWindow(HWND,GW_CHILD)
HWND возвращается корректно, но при перерисовке возникают артефакты, я думаю и зз-за ошибок синхронизации совместного доступа потоков моей программы и мапинфо к переподчиненному окну. Которое к тому же во время перерисовки неактивно (без фокуса).
Второй путь:
При переключении вкладок посылал сообщения Окну карты найденному через GetWindow. Сообщения отследил SPY++ там ничего особенного
При активизации окнe карты прилетает WM_SETFOCUS и WM_CHILDACTIVATE (может быть нужное сообщение отфильтровал в настройках?) ВОТ ТУТ МЕНЯ ОСЕНИЛО.
Попробовал WM_MOUSEACTIVATE, работает как надо!
Тестировал через beep в WiNFOCUSCHANGED :
на сетфокус и чайлд активейт тоже пикает, но окно не активизируется.
На маусактивейт и пикает и активизируется. Помощь не требуется, но ситуация типичная, может кому то будет интересно. |
|