У меня есть программа Windows, в которой есть два окна:
hwnd (main interface)
hwnd2 (toplevel window, no parent, created by hwnd)
Когда я дважды нажимаю на hwnd, мне нужно, чтобы hwnd2 всплывал и показывал некоторые данные, поэтому я использую эту функцию для вывода hwnd2 в начало:
BringWindowToTop(hwnd2);
hwnd2 доведено до вершины, но есть одна вещь нечетная. Когда я снова нажимаю hwnd2, hwnd (основной интерфейс) автоматически появляется автоматически. Я попытался использовать следующую функцию для решения этой проблемы, но не работает.
SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
//doesn't work
BringWindowToTop(hwnd2); //This is the function brings hwnd2 to top
SetForegroundWindow(hwnd2); //doesn't work
SetWindowPos(hwnd2, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
//doesn't work
SetWindowPos(hwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
// hwnd2 "always" on top, not what I want
SetActiveWindow(hwnd2); // doesn't work too (for replying to Magnus Skog, thanks)
SwitchToThisWindow(hwnd2, TRUE);// got the same problem with BringWindowToTop function
SwitchToThisWindow(hwnd2, FALSE);
Как я могу решить эту проблему? Спасибо заранее.
(для ответа на aJ, hwnd2 не имеет родительского элемента, поскольку он должен быть оконным окном, чтобы он мог находиться в передней/задней части других окон)
(hwnd2 - медиаплеер, состоящий из нескольких окон, одно из окон - для видеодисплеирования, два других элемента управления трекбарами для индикатора выполнения и строки тома, один элемент панели управления для панели управления.)
(Возможно, это может помочь, независимо от того, какое окно я нахожу на hwnd2, hwnd появляется автоматически, поскольку "мышь находится поверх hwnd в Z-порядке", включая панель меню и неклиентскую область, и др.)
(Этот медиаплеер записывается в Direct Show.Я использую IVideoWindow:: put_Owner для размещения видеоокна в качестве владельца видео, Direct Show внутренне создает окно суб-видео в качестве дочернего объекта видео-окна. За исключением этого суб- видео, которое я не вижу в исходном коде, я не вижу ничего подозрительного в hwnd2.)
Я нашел причину, которая вызвана Direct Show. Я использую multithread для его выполнения, а затем проблема решена. Но... почему??
Эта проблема может быть решена с помощью PostMessage (а не SendMessage).