Изменение размера у окна без активизирования
От: Leonid33  
Дата: 25.01.02 10:54
Оценка:
Ситуация:
Есть выпадающее окно (в компоненте типа ComboEdit)
Это окно умеет изменять размер, но не имеет фокуса ввода с клавиатуры.
Фокус ввода должен быть всегда у соответствующего редактора (у дрругого окна).
Для этого на сообщение WM_MOUSEACTIVATE отвечаю MA_NOACTIVATE.

Но при изменении размера этого окна (выпадающего),
ему приходит сообщение WM_ACTIVATE и оно получает фокус ввода.
Как этого избежать?
Re: Изменение размера у окна без активизирования
От: Gambler  
Дата: 25.01.02 14:27
Оценка:
Здравствуйте Leonid33, Вы писали:

L>Ситуация:

L> Есть выпадающее окно (в компоненте типа ComboEdit)
L>Это окно умеет изменять размер, но не имеет фокуса ввода с клавиатуры.
L>Фокус ввода должен быть всегда у соответствующего редактора (у дрругого окна).
L>Для этого на сообщение WM_MOUSEACTIVATE отвечаю MA_NOACTIVATE.

L>Но при изменении размера этого окна (выпадающего),

L>ему приходит сообщение WM_ACTIVATE и оно получает фокус ввода.
L>Как этого избежать?

Как обычно в таких случаях — открываю MSDN — ищу WM_ACTIVATE и ессно читаю.
А написано там вот что:

LRESULT CALLBACK WindowProc(
  HWND hwnd,       // handle to window
  UINT uMsg,       // WM_ACTIVATE
  WPARAM wParam,   // activation and minimization options
  LPARAM lParam    // handle to window (HWND)
);


wParam

lParam
Вот значит проверяем флаги и активируем окно HWND(lParam) —

SetActiveWindow(HWND(lParam));

Вот и всё.

Удачи.
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Re[2]: Изменение размера у окна без активизирования
От: Leonid33  
Дата: 25.01.02 15:12
Оценка:
L>>Как этого избежать?

G>Как обычно в таких случаях — открываю MSDN — ищу WM_ACTIVATE и ессно читаю.

G>А написано там вот что:
...
G>Вот значит проверяем флаги и активируем окно HWND(lParam) —

G>
G>SetActiveWindow(HWND(lParam));
G>

G>Вот и всё.

G>Удачи.


Это-то понятно, что можно венуть фокус обратно.
В приципе — это тоже решение.
Но можно ли, вообще, избежать в данном случае передачу фокуса?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.