Добрый день уважаемые.
Есть проблема.
У нас пункты меню в зависимости от текущего фокуса дисейблятся/энейблятся.
Данные в popup-окне, хочется, чтобы при активации меню фокус с popup окна не перемещался на основное окно. Так сделано в VS.
Обработка сообщения WM_MOUSEACTIVATE не помогает.
Есть предложения?
Здравствуйте, Karabinos, Вы писали:
K>Добрый день уважаемые. K>Есть проблема. K>У нас пункты меню в зависимости от текущего фокуса дисейблятся/энейблятся. K>Данные в popup-окне, хочется, чтобы при активации меню фокус с popup окна не перемещался на основное окно. Так сделано в VS. K>Обработка сообщения WM_MOUSEACTIVATE не помогает. K>Есть предложения?
А которые попап-ные окна в VS?
Если всякие докабельные, то у них просто стиль WS_EX_TOOLWINDOW
Тока не уверен, что этого хватит. Вроде ещё что-то требуется...
Здравствуйте, CEMb, Вы писали:
CEM>Здравствуйте, Karabinos, Вы писали:
K>>Добрый день уважаемые. K>>Есть проблема. K>>У нас пункты меню в зависимости от текущего фокуса дисейблятся/энейблятся. K>>Данные в popup-окне, хочется, чтобы при активации меню фокус с popup окна не перемещался на основное окно. Так сделано в VS. K>>Обработка сообщения WM_MOUSEACTIVATE не помогает. K>>Есть предложения?
CEM>А которые попап-ные окна в VS? CEM>Если всякие докабельные, то у них просто стиль WS_EX_TOOLWINDOW CEM>Тока не уверен, что этого хватит. Вроде ещё что-то требуется...
В VS именно докебл-окна и есть popup-окна. И у них стиль WS_EX_TOOLWINDOW
Одно другому не мешает. Стиль WS_EX_TOOLWINDOW здесь не причем.
Здравствуйте, Karabinos, Вы писали:
K>Обработка сообщения WM_MOUSEACTIVATE не помогает. K>Есть предложения?
Помогает. Только надо свое меню делать, и там WM_MOUSEACTIVATE обрабатывать, чтобы меню не забирало фокус у других окон (и неважно, у popup или у child окон). Пример меню, которое не забирает фокуса — это обычное popup menu (CreatePopupMenu). Сделайте себе подобное — и будет вам счастье
Здравствуйте, asheff, Вы писали:
A>Здравствуйте, Karabinos, Вы писали:
K>>Обработка сообщения WM_MOUSEACTIVATE не помогает. K>>Есть предложения?
A>Помогает. Только надо свое меню делать, и там WM_MOUSEACTIVATE обрабатывать, чтобы меню не забирало фокус у других окон (и неважно, у popup или у child окон). Пример меню, которое не забирает фокуса — это обычное popup menu (CreatePopupMenu). Сделайте себе подобное — и будет вам счастье
К сожалению popup menu (CreatePopupMenu) забирает фокус, но при этом не становится активным. И этим отлючатся от любого обычного окна.
PS. Дату видел... Просто наболело. Бьюсь уже месяц — не знаю как сделать такое окно, которое получало бы фокус, но не активацию...
>К сожалению popup menu (CreatePopupMenu) забирает фокус, но при этом не становится активным. И этим отлючатся от любого обычного окна. >PS. Дату видел... Просто наболело. Бьюсь уже месяц — не знаю как сделать такое окно, которое получало бы фокус, но не активацию...
а почему ты уверен, что попап окно забирает фокус?
то есть тебе нужно сделать нечто вроде поведения календаря в контроле date & time picker (при активации календаря фокус остаётся на главном окне, но тем не менее можно стрелками менять дату в календаре) ?
Здравствуйте, Вумудщзук, Вы писали:
>>К сожалению popup menu (CreatePopupMenu) забирает фокус, но при этом не становится активным. И этим отлючатся от любого обычного окна. >>PS. Дату видел... Просто наболело. Бьюсь уже месяц — не знаю как сделать такое окно, которое получало бы фокус, но не активацию... В>а почему ты уверен, что попап окно забирает фокус? В>то есть тебе нужно сделать нечто вроде поведения календаря в контроле date & time picker (при активации календаря фокус остаётся на главном окне, но тем не менее можно стрелками менять дату в календаре) ?
Проверял через ::GetFocus() и ::GetActiveWindow() по таймеру...
Насчет календаря — что-такое...
>Проверял через ::GetFocus() и ::GetActiveWindow() по таймеру... >Насчет календаря — что-такое...
винда в таких случаях (тот же календарь, например) показывает окно без активации [ShowWindow(SW_SHOWNA)] и вертит свой цикл сообщений, в котором ловит во1х мышиные клики, не попадающие в окно, закрывая его при этом, и во2х клавиатурные сообщения — они пересылаются окну; ну и ещё по мелочам WM_KILLFOCUS, WM_SYSKEYDOWN, WM_ESCAPE, WM_QUIT (они все закрывают окно). Этим как раз и достигается, что фокус стоит на поле ввода, но клавиатурные сообщения идут в окно, которое ведёт себя так, будто фокус на нём. А вот уже если по окну кликнуть мышью, тогда оно действительно получает фокус. Ну, а если и этого надо избежать, то ловим WM_MOUSEACTIVATE и возвращаем MA_NOACTIVATE.