2009-11-05 3 views
0

기본 양식이 있습니다. 이 메인 폼은 또 다른 폼을 생성합니다. 이 새 양식은 다른 창에 액세스하기 전에 채워야합니다. 이 양식을 모달로 만들기 위해 Myform.ShowDialog()를 사용했습니다.C++ 내 양식이 모든 종류의 창 위에 있어야합니다.

이 양식이 내 응용 프로그램의 일부가 아니더라도 내 양식이 다른 모든 창의 유형 위에 놓이기를 바랍니다 (예 : 인터넷 탐색기 페이지, 열린 Word 문서 ...).

해결책이 있습니까? 당신은 당신이 Form.TopMost를 사용하여 Form.TopMost 속성

myForm->TopMost = true; 
myForm->ShowDialog(); 

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost.aspx

+4

매우 불쾌한 프로그램 동작입니다. 정말로 사용자의 모든 응용 프로그램을 차단하는 데 유효한 이유가 있습니까? 나는 그것을 의심한다. –

+1

정말 그럴 수있는 방법이 있는지 의심 스럽습니다. 왜냐하면 2 개의 응용 프로그램 모두 그렇게했을까요? 어느 것이 앞에 있을까요? –

+1

할 수있는 방법이 있지만 짜증나고 정당하지 않을 수 있습니다. –

답변

2

소리가 난다 응용 프로그램의 다른 창 위에 창을 표시하지만 다른 응용 프로그램에서는 작동하지 않습니다.

다른 창 위에 창을 띄우는 응용 프로그램을 보았지만 다른 응용 프로그램을 사용할 수없는 모달 대화 상자를 만들 수 있다고 생각하지 않습니다.

정말 더러운 해킹은 매초마다 전경을 향해 타이머를 강제하는 것입니다. 사용자가 의미있는 방식으로 다른 응용 프로그램을 사용할 수 없다는 것을 의미하지만, 은 분명히 사용자를 싫어합니다..

Windows Vista/7 스타일의 UAC 대화 상자를 시뮬레이션해볼 수도 있습니다. 바탕 화면의 스냅 샷을 찍고 그 이미지가있는 전체 화면 창을 만든 다음 맨 위에 Windows를 렌더링하십시오. 그러나 경험에 따르면 사용자는 해당 UAC 대화 상자를 좋아하지 않습니다.

0

을 사용할 수있는 경우 .NET

을 사용하고 같은

덕분에,

+0

사실이 아니라면 Visual Studio를 실행하여 사용해보십시오. 새 양식 응용 프로그램 (예 : C#)을 만들고 Load 메서드에서 this.TopMost = true로 설정합니다. 그런 다음 다른 창 위에 초점을 맞 춥니 다. 이 기능은 적어도 Windows 95 이후부터 제공되었을 것입니다. 전통적으로 "Always on top"이라고 표시되었습니다. –

+0

대화 상자가 활성화 될 때 포커스가있는 응용 프로그램 이었으면이 사실이 적용됩니다. 그러나 초점이 인터넷 탐색기에있는 경우 대화 상자 팝업 창이 다시 선택할 때까지 창에 남아있을 것입니다. 감사합니다, – user90714

0

form->DoModal() 트릭을 수행하지 않습니까? 응용 프로그램이 작업을 수행하는 것이 가능했던 경우

상상, 당신이 한, 다른 응용 프로그램도 이런 짓을 : 레이몬드 첸이 불가능 이유를 증명

+0

이 응용 프로그램 내에서 작동하지만 다른 프로그램에서 창 맨 위에 머물 것으로 생각합니다. – theycallmemorty

+0

이것은 AFAIK 창문에서 얻을 수있는만큼 좋습니다. 그것은 윈도우 3.1, 어쩌면 심지어 윈도우 95에서 가능했지만 더 이상. 좋은 일, 성가신 행동 :-) –

0

(? 어쨌든 MFC에서 작동). 이제 분명히 그 응용 프로그램은 당신을 포함하여 모든 윈도우 위에있을 것입니다. 그러나 응용 프로그램은 윈도우를 포함하여 다른 모든 윈도우의 위에있을 것입니다. 창문이 창 위에 있고 창문이 창 위에 있다는 것은 논리적으로 불가능합니다. 따라서 논리적으로 모든 응용 프로그램이 최상위 창을 요구할 수는 없습니다.

+0

윈도우 중 하나가 최상위 일 것입니다. – CiscoIPPhone

+0

분명히 다른 애플리케이션이 창을 최상으로 만들 수 있다는 전제를 위반했습니다. – MSalters

관련 문제