У меня есть программа для 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. Я использую многопоточность, чтобы выполнить его, и тогда проблема решена. Но ... почему ??
Эта проблема может быть решена с помощью PostMessage (а не SendMessage).