Консоль. Owned-окно "на фоне"
От: IDr Россия  
Дата: 14.07.08 10:11
Оценка:
Может кто-нибудь сможет объяснить следующий момент:

Консольное приложение, но часть сообщений выводится MessageBox-ом, которому
в качестве owner-а передается хэндл консоли, найденный как описано здесь.
Проблема в том, что при первом с момента запуска показе MessageBox-а, фокус перескакивает
на другое окно (бывшее активным до нашего консольного), потом возвращается на консоль, но окно MessageBox-а, не становится Foreground-окном. При последующих вызовах все нормально..
Может сталкивались?
Re: Консоль. Owned-окно "на фоне"
От: Аноним  
Дата: 14.07.08 19:24
Оценка:
Здравствуйте, IDr, Вы писали:

IDr>Может кто-нибудь сможет объяснить следующий момент:


IDr>Консольное приложение, но часть сообщений выводится MessageBox-ом, которому

IDr>в качестве owner-а передается хэндл консоли, найденный как описано здесь.
IDr>Проблема в том, что при первом с момента запуска показе MessageBox-а, фокус перескакивает
IDr>на другое окно (бывшее активным до нашего консольного), потом возвращается на консоль, но окно MessageBox-а, не становится Foreground-окном. При последующих вызовах все нормально..
IDr>Может сталкивались?

...
hwndFound=FindWindow(NULL, pszNewWindowTitle);
...
MessageBox(hwndFound, "Hello", "Test", 0x40);
...

Может так?
Re[2]: Консоль. Owned-окно "на фоне"
От: Аноним  
Дата: 15.07.08 04:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Может так?


Видимо вы меня не так поняли
Описываю подробнее: создаем в MSVC консольное приложение, в единственный
cpp-файл проекта вставляем без изменений функцию GetConsoleHwnd из вышеприведенной
KB-статьи, в функции main пишем что нить типа:
int _tmain(int argc, _TCHAR* argv[])
{
   char c;
   while (true)
   {
      cin >> c;
      if (c=='q') break;
      else MessageBox(GetConsoleHwnd(),"Try","Test",MB_OK);
   }
   return 0;
}


Собираем приложение, сворачиваем все окна, запускаем его (не под отладчиком) и,
например, Far.
Переключаемся мышой на Far (чтобы предыдущим активным стал Far, система хранит (или вычисляет)
список-последовательность активных окон, по которым потом можно ходить по Alt-Esc), потом обратно и
жмем какую-нибудь кнопку — на долю секунды активным станет Far, потом опять консоль и
MessageBox появится "на фоне"
Re[3]: Консоль. Owned-окно "на фоне"
От: Danchik Украина  
Дата: 15.07.08 07:13
Оценка:
Здравствуйте, Аноним, Вы писали:

[Skip]

А>Собираем приложение, сворачиваем все окна, запускаем его (не под отладчиком) и,

А>например, Far.
А>Переключаемся мышой на Far (чтобы предыдущим активным стал Far, система хранит (или вычисляет)
А>список-последовательность активных окон, по которым потом можно ходить по Alt-Esc), потом обратно и
А>жмем какую-нибудь кнопку — на долю секунды активным станет Far, потом опять консоль и
А>MessageBox появится "на фоне"

Все работает как часы, Far не моргает. Что у вас за косяки понять не могу. Что значит MessageBox "на фоне"?
Re[4]: Консоль. Owned-окно "на фоне"
От: IDr Россия  
Дата: 15.07.08 08:12
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Что значит MessageBox "на фоне"?


Да, не совсем конечно хорошо выразился. В моем случае это значит, что окно MessageBox-а
находится в неактивном состоянии (тема классическая — caption-серый) и за окном Far-а, то есть его (MessageBox-а) не видно, более того — активным подсвечивается окно консоли. При щелчке мышкой на консоли — появляется MessageBox (становится активным), окно консоли подсвечивается серым, на ввод не отвечает, как и должно быть при модальном дочернем окне. Проявляется эта хрень только при первом вызове MessageBox-а (при последующих все нормально) и при запуске не из среды, проверял и на debug и на release-версиях.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.