나는 또한 내가 일하고있는 설치 프로그램의 부트 스트랩이 될 응용 프로그램을 만들고 있습니다. 응용 프로그램은 응용 프로그램의 기본 창인 마법사를 구성하는 데 필요한 정보를 얻기 위해 몇 번의 MSI 호출을 수행합니다.이 창은 정보가 수집되는 동안 진행 창이 열리고 완료되면 사라집니다. 그런 다음 마법사가 설정되고 실행됩니다. 내 문제는 (CPropertySheet에서 파생 된) 마법사가 앞에 오지 않고 그렇게하기위한 호출을 추가하지 않고 활성 응용 프로그램이되기를 원하지 않는다는 것입니다.어떻게하면 앱이 앞으로 나오게하고 포커스를 맞출 수 있습니까?
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // force window to top
SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // lose the topmost status that the previous line gave us
내 문제는 내가 아직 창을 만드는 방법을 알아 냈하지 않은 것입니다 :
나는 나의의 OnInitDialog() 메소드에 다음 코드를 전면에 데려의 문제를 해결했습니다 self-activate (즉, 자신이 초점을 가진 사람이되게하십시오). SetFocus()는이 컨텍스트에서 작동하지 않습니다. 창문을 Z-order의 꼭대기로 밀어 넣고 가능한 한 적은 수의 호출로 창을 활성화시키는 무언가가 필요합니다.
내 생각 엔 MSI 호출에 의해 처음 열렸던 진행 창이 메인 윈도우를 망가 뜨리는 원인으로 보이지만 그 창이 나타나지 않도록 할 방법이 없다. 또한, 주 윈도우가 도착하기 전에 어떤 일이 일어나는지 사용자에게 알려주므로 숨길 수는 없습니다.
시도하지는 않았지만 BringWindowToTop()보다 효과적이지는 않습니다. (미치 Wheat의 대답에 내 의견을 참조하십시오.) – RobH