Re: Реализация поведения фокуса как в Visual Assist'e...
От: kiborg Россия  
Дата: 20.11.09 16:37
Оценка: 6 (2)
В оконной процедуре дочернего окна обрабатываешь сообщение WM_NCACTIVATE
Примерно вот так:

    case WM_NCACTIVATE: 
    if (wParam)
    {
          SetActiveWindow(hParent->handle());
    } 
    else
    {
      return false;
    }
    break;

Т.е. когда активируется дочернее окно, делаешь активным назад родителя, а когда теряет активность дочернее запрещаешь ему терять активность. Т.о. получаются два окна с всегда активными заголовками окна.
Реализация поведения фокуса как в Visual Assist'e...
От: Turs  
Дата: 19.11.09 16:16
Оценка:
Есть окно, по клику создаем дочернее окно (WS_POPUP | WS_THICKFRAME) с лист контролом. При клике на лист контроле селектируется элемент, при этом теряется фокус с самого главного окна. Хотелось бы получить аналогичное поведение как работает Visual Assist в студии.
Выставление флага WS_EX_NOACTIVATE дочернему окну (в 6 студии его кстати нету ), попытки разнести окна в различные потоки со своими мессадж лупами, AttachThreadInput, обработка WM_ACTIVATE и танцы с бубном успеха не принесли.

Как можно это реализовать? Подскажите идею. Возможно это все надо как-то объединить?
Re: Реализация поведения фокуса как в Visual Assist'e...
От: Carc Россия http://www.amlpages.com/home.php
Дата: 20.11.09 15:13
Оценка:
Здравствуйте, Turs, Вы писали:

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

T>Выставление флага WS_EX_NOACTIVATE дочернему окну (в 6 студии его кстати нету ), попытки разнести окна в различные потоки со своими мессадж лупами, AttachThreadInput, обработка WM_ACTIVATE и танцы с бубном успеха не принесли.

T>Как можно это реализовать? Подскажите идею. Возможно это все надо как-то объединить?

1) Ну теряется фокес и теряется, чего плохого то!?! Список же знает куда его потом вернуть?!? В чем проблема-то?
2) WS_EX_NOACTIVATE это не то — окно вообще на мыша реагировать перестанет.
Aml Pages Home
Re[2]: Реализация поведения фокуса как в Visual Assist'e...
От: Turs  
Дата: 25.11.09 07:08
Оценка:
Здравствуйте, 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 помогло. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.