Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Хендл окна предыдущего активного приложения?  (Прочитано 14132 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Друг
Гость
« : 24-02-2004 09:47 » 

Здравствуйте.

Подскажите, как определить хенд окна предыдущего
активного приложения.

Спасибо.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 24-02-2004 10:08 » 

SetFocus() возвращает хендл предыдущего окна
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Друг
Гость
« Ответ #2 : 24-02-2004 10:24 » 

Вот, например, свернул я моё окно, и другое окно стало активным и
получило фокус ввода.
Это именно то окно, которое было активно, до моего.
Вот я хочу знать его хендл.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 24-02-2004 10:34 » 

Джон, это если "вручную" устанавливать фокус.
Можно еще делать обработку WM_SETFOCUS у того окна, которое становится активным - в wParam передается тот же hwnd.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anonymous
Гость
« Ответ #4 : 24-02-2004 10:47 » 

Цитата: RXL
Джон, это если "вручную" устанавливать фокус.
Можно еще делать обработку WM_SETFOCUS у того окна, которое становится активным - в wParam передается тот же hwnd.


А в MSDN написано:
-----------------------------------------------------------------------------
wParam
Handle to the window that has lost the keyboard focus. This parameter can be NULL.
lParam
This parameter is not used.
--------------------------------------------------------------------------------
И на практике - NULL.
  Так больше нельзя...
Записан
Друг
Гость
« Ответ #5 : 24-02-2004 10:47 » 

Цитата: RXL
Джон, это если "вручную" устанавливать фокус.
Можно еще делать обработку WM_SETFOCUS у того окна, которое становится активным - в wParam передается тот же hwnd.


А в MSDN написано:
-----------------------------------------------------------------------------
wParam
Handle to the window that has lost the keyboard focus. This parameter can be NULL.
lParam
This parameter is not used.
--------------------------------------------------------------------------------
И на практике - NULL.
  Так больше нельзя...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 24-02-2004 11:48 » 

Мда, действительно. Ведь WM_SETFOСUS относится к клавиатурному фокусу, а не к активности окна.

Встречный вопрос - зачем это нужно? Может как попроще возможно...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Друг
Гость
« Ответ #7 : 24-02-2004 12:14 » 

См. приложение виндовс - "Экранная клавиатура".
Меня интересует как реализована фича:
окно реагирует на клики пользователя,
при этом фокус ввода возвращен в приложение, активное прежде.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 24-02-2004 14:38 » 

Попробуй покапать в сторону тулбаров. У них тоже есть такое свойство - "не забирать фокус". Может поконкретней, а то моделировать времени нет  Жаль

зы А в чём проблема-то с SetFocus() ? Если ты получаешь OnSetFocus()
то в параметре как раз прежнее окошко. Например в MFC:

BEGIN_MESSAGE_MAP(CProjTree, CTreeCtrl)
   ON_WM_SETFOCUS()
END_MESSAGE_MAP()

void CMy::OnSetFocus(CWnd* pOldWnd)
{
   CWnd::OnSetFocus(pOldWnd);

   // TODO: Add your message handler code here
}
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #9 : 24-02-2004 16:09 » 

Попробуй использовать GetWindow(hwnd, GW_HWNDNEXT)
по идее это должно быть имено то окно.
Записан

Megabyte be with you!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 24-02-2004 17:20 » 

"Следующее" окно, согласно MSDN, это в z-порядке. А если "то" окно было минимизированно, то будет ли оно "следующим"? А если закрылось?
Что-то тут другое должно быть.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Друг
Гость
« Ответ #11 : 25-02-2004 06:53 » new

Цитата: Lex
Попробуй использовать GetWindow(hwnd, GW_HWNDNEXT)
по идее это должно быть имено то окно.

А на практике GetNextWindow выдает хендл некоторого
окна верхнего уровня и, вовсе, не последнего активного...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines