Полноэкранный режим для управления ActiveX

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

Однако у меня проблема с переключением между приложениями, когда управление находится в полноэкранном режиме. Если я переключаюсь на другое приложение и затем нажимаю на область моего окна (не на панели задач), оно, похоже, не активируется. На панели задач видно, что другое приложение по-прежнему имеет выделение, а на главном экране мое окно частично скрыто за панелью задач, если оно не имеет фокуса.

Я обрабатываю WM_LBUTTONDOWN оконное сообщение, чтобы определить, щелкнуло ли мое окно. И я уже пытался вызвать следующие функции WINAPI:

::ShowWindow(m_hWnd, SW_RESTORE);
::SwitchToThisWindow(m_hWnd, FALSE);
::SetForegroundWindow(m_hWnd);
::SetActiveWindow(m_hWnd);
::SetFocus(m_hWnd);
::BringWindowToTop(m_hWnd);
::SetWindowPos(m_hWnd, HWND_TOP, m_monitorInfo.rcMonitor.left, m_monitorInfo.rcMonitor.top, m_monitorInfo.rcMonitor.right, m_monitorInfo.rcMonitor.bottom, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); // SWP_NOACTIVATE, SWP_NOOWNERZORDER

Я также пытался использовать ::SetWindowLongW(m_hWnd, GWL_STYLE, WS_VISIBLE); что удивительно вернуло мое окно назад. Но затем он внезапно исчез при попытке снова переключиться в полноэкранный режим.

Я понятия не имею, почему существует так много разных функций, которые для меня, кажется, все делают примерно одинаково. Но это не имеет значения, так как никто из них не сработал.

Как правильно / правильно управлять моим контролем?

0

Решение

Windows может запутаться, потому что вы заполняете экран дочерним окном, но вы хотите, чтобы он вел себя как окно верхнего уровня (перекрывающееся). Хост-приложение, вероятно, не активируется, потому что вы скрыли его окно.

Возможно, вам лучше создать новое полноэкранное окно верхнего уровня для полноэкранного режима. Если оно принадлежит окну верхнего уровня, которое (в конечном счете) содержит ваш элемент управления, тогда ваше новое окно всегда будет над ним, поэтому вам не нужно скрывать существующее окно. Активация должна просто работать. Короче говоря, вы хотите, чтобы ваше окно велось как всплывающее модальное диалоговое окно.

Adobe Flash Player, кажется, делает что-то подобное. Полноэкранное воспроизведение в окне класса ShockwaveFlashFullScreen,

4

Другие решения

Других решений пока нет …