Попап-окно не становится фореграундом
От: Кодт Россия  
Дата: 01.03.16 17:24
Оценка:
Пытаюсь зафиксить крайне странный баг.
Суть его такая.

Есть оконный поток, в нём главное окно, всё как обычно.
Запускается рабочий поток, в нём создаётся диалог. (Да, это принципиально: запускать в отдельном рабочем потоке).
И почему-то иногда этот диалог не становится foreground window.

Баг наблюдался на стандартном диалоге винды — о запуске файла из недоверенного источника по ShellExecute.

Я пытаюсь воспроизвести ситуацию вручную и, по возможности, побороть, не субклассируя диалог и минимально вламываясь в код главного окна.
И вот эта зараза воспроизводится через раз!

Главный симптом выглядит так
::SetForegroundWindow(::GetDesktopWindow());
LOG(INFO) << ::GetForegroundWindow(); // NULL - окей.

HWND hwndDlg = ::CreateWindow(
   WS_POPUPWINDOW|WS_CAPTION, // стиль
   ...
   ::GetDesktopWindow(), // родитель
   ...);

LOG(INFO) << ::GetForegroundWindow(); // NULL - логично.
::ShowWindow(hwndDlg, SW_SHOW); // по идее, должно выскочить на передний план.

//---- с этого места я не имею права управлять окном - я же эмулирую чужой диалог

LOG(INFO) << ::GetForegroundWindow(); // Либо hwndDlg, либо NULL. :(


Есть какие-нибудь идеи?
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.