Есть окно, по клику создаем дочернее окно (WS_POPUP | WS_THICKFRAME) с лист контролом. При клике на лист контроле селектируется элемент, при этом теряется фокус с самого главного окна. Хотелось бы получить аналогичное поведение как работает Visual Assist в студии.
Выставление флага WS_EX_NOACTIVATE дочернему окну (в 6 студии его кстати нету

), попытки разнести окна в различные потоки со своими мессадж лупами, AttachThreadInput, обработка WM_ACTIVATE и танцы с бубном успеха не принесли.
Как можно это реализовать?

Подскажите идею. Возможно это все надо как-то объединить?
Здравствуйте, Turs, Вы писали:
T>Есть окно, по клику создаем дочернее окно (WS_POPUP | WS_THICKFRAME) с лист контролом. При клике на лист контроле селектируется элемент, при этом теряется фокус с самого главного окна. Хотелось бы получить аналогичное поведение как работает Visual Assist в студии.
T>Выставление флага WS_EX_NOACTIVATE дочернему окну (в 6 студии его кстати нету
), попытки разнести окна в различные потоки со своими мессадж лупами, AttachThreadInput, обработка WM_ACTIVATE и танцы с бубном успеха не принесли.
T>Как можно это реализовать?
Подскажите идею. Возможно это все надо как-то объединить?
1) Ну теряется фокес и теряется, чего плохого то!?! Список же знает куда его потом вернуть?!? В чем проблема-то?
2) WS_EX_NOACTIVATE это не то — окно вообще на мыша реагировать перестанет.
В оконной процедуре дочернего окна обрабатываешь сообщение WM_NCACTIVATE
Примерно вот так:
case WM_NCACTIVATE:
if (wParam)
{
SetActiveWindow(hParent->handle());
}
else
{
return false;
}
break;
Т.е. когда активируется дочернее окно, делаешь активным назад родителя, а когда теряет активность дочернее запрещаешь ему терять активность. Т.о. получаются два окна с всегда активными заголовками окна.
Здравствуйте, kiborg, Вы писали:
K>В оконной процедуре дочернего окна обрабатываешь сообщение WM_NCACTIVATE
K>Примерно вот так:
K>K> case WM_NCACTIVATE:
K> if (wParam)
K> {
K> SetActiveWindow(hParent->handle());
K> }
K> else
K> {
K> return false;
K> }
K> break;
K>
K>Т.е. когда активируется дочернее окно, делаешь активным назад родителя, а когда теряет активность дочернее запрещаешь ему терять активность. Т.о. получаются два окна с всегда активными заголовками окна.

WM_NCACTIVATE помогло. Спасибо.