2012-09-25 4 views
0

ActiveX 컨트롤에 대해 전체 화면 전환 모드를 구현하려고했습니다. 이것은 현재 부모 창을 제거하고 숨기고 내 컨트롤의 위치와 위치를 변경하여 작동합니다.ActiveX 컨트롤의 전체 화면 모드

그러나 컨트롤이 전체 화면 모드 인 동안 응용 프로그램을 전환하는 데 문제가 있습니다. 다른 응용 프로그램으로 전환 한 다음 작업 표시 줄이 아닌 창 영역을 클릭하면 활성화되지 않은 것으로 보입니다. 작업 표시 줄에서 다른 응용 프로그램이 아직 강조 표시되어 있고 주 화면에 내 포커스가 있지 않으면 내 창이 작업 표시 줄 뒤에 부분적으로 숨겨져 있음을 볼 수 있습니다.

윈도우 메시지를 처리하여 내 창이 클릭되는지 확인합니다. 그리고 난 이미 다음 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);을 사용했습니다. 그러나 전체 화면 모드에서 다시 전환하려고 할 때 갑자기 사라졌습니다.

내가 왜 그렇게 많은 기능을 갖고 있는지 알지 못한다. 그러나 어쨌든 그들 중 누구도 일하지 않아도 상관 없습니다.

내 컨트롤을 올바르게 작동시키는 올바른 방법은 무엇입니까?

답변

4

자식 창으로 화면을 채우고 있지만 최상위 (겹쳐진) 창처럼 동작하기를 원하기 때문에 Windows가 약간 혼란스러워 질 수 있습니다. 창을 숨겨서 호스트 응용 프로그램이 활성화되지 않을 수도 있습니다.

전체 화면 모드로 새로운 최상위 전체 화면 창을 만드는 것이 더 좋습니다. 이것이 (궁극적으로) 컨트롤을 호스트하는 최상위 창에 의해 소유된다면, 새로운 창이 항상 위에있을 것이므로 기존 창을 숨길 필요가 없습니다. 활성화가 작동해야합니다. 간단히 말해서, 창을 팝업 모달 대화 상자와 같이 작동하게합니다.

Adobe의 플래시 플레이어는 비슷한 것을 수행하는 것 같습니다. 전체 화면 재생은 클래스 ShockwaveFlashFullScreen의 창에 있습니다.

관련 문제