2009-11-04 4 views
0

머리말 : wxWidgets 2.8.10 Windows 용 프로젝트.부모가 클릭되었을 때 wxWidgets 팝업 창이 사라지는 적절한 방법?

메인 애플리케이션 창이 있습니다 (프레임의 컨트롤). 사용자가 단축키를 누르면 팝업 창 (wxDialog로 구현 됨)이 부모 내에 가운데에 표시됩니다.

내가 원하는 동작은 사용자가 팝업 창의 외부를 부모 창에 클릭 한 다음 팝업이 끝나면 EndModal (wxID_CANCEL)이 닫히는 것입니다.

그러나 사용자가 다른 앱으로 팝업 외부를 클릭하면 팝업이 거기에 머물러 있어야합니다.

의견이 있으십니까?

답변

0

팝업 창에서 EVT_KILL_FOCUS를 어떻게 처리합니까? 창의 바깥 쪽을 클릭하면 클릭 한 창이 포커스를받습니다.

+0

내 앱에서 다른 창을 클릭하거나 다른 앱을 완전히 클릭하여 포커스가 강제 종료되었는지 알 수있는 방법이 있습니까? –

+0

음, 어딘가에 현재 포커스 윈도우를 저장하는 전역 변수가 있습니다. 나는 소스 코드를 통해 디버깅하는 동안 그것을 우연히 발견했다. 그것이 그것이 었는지와 그것이 공개적으로 접근 할 수 있었던 것인지 잊었다. 어쨌든 wxApp :: IsActive가 더 나은 선택 일 수 있습니다. EVT_KILL_FOCUS를 처리하고 wxApp :: IsActive를 사용하여 전체 앱 또는 창에 포커스가 손실되었는지 여부를 확인합니다. – BuschnicK

0

마우스를 화면 영역 밖으로 밀 때 대화 상자를 닫으려면 마우스 클릭을 파악해야합니다. 모달 대화 상자가 표시되어있는 동안 비활성화되어 있으므로 불행히도 부모 폼은 부모 폼을받지 못합니다. 이것은 시스템 수준에서 발생하므로 어떤 마우스 메시지도 앱의 비활성화 된 창에 전송되지 않습니다. 실제로 내 첫 번째 아이디어는 wxApp::FilterEvents()을 사용하는 것이지만이 때문에이 목적에는 쓸모가 없습니다.

마우스 커서가 화면 영역 외부에 있지만 응용 프로그램의 다른 창 위에있을 때에도 모든 마우스 이벤트를 캡처가있는 창으로 전달하는 데 사용할 수있는 방법이 있습니다.

+0

"불행히도 동일한 응용 프로그램의 다른 창이나 다른 응용 프로그램의 창으로 이동할지 여부에 관계없이 모든 마우스 이벤트가 수신됩니다." CaptureMouse()는 클릭 수가 다른 앱으로 이동하는 것을 차단하지 않습니다. 다른 응용 프로그램을 클릭하면 마우스 캡처가 손실됩니다 (처리해야하는 효과에 대한 메시지가 나타나거나 wxWidgets이 어설 션한다는 메시지가 나타납니다). –

+0

@Adam : 맞습니다. 따라서 조사 할 가치가 있습니다. 나는 잃어버린 사건을 포착했음을 알고 있지만 정신적 인 관계를 만들지는 않았다. 그에 따라 대답을 편집 할 것이다. 댓글 주셔서 감사합니다. – mghie

관련 문제