2014-01-09 1 views
2

소켓 연결을 통해 C++ MFC 응용 프로그램과 통신하는 WPF 응용 프로그램이 있습니다. 사용자가 C++ 응용 프로그램에서 특정 단추를 누르면 새 WPF 창이 표시됩니다. 키보드 포커스가되지 않습니다 이러한 방식으로 표시됩니다 특정 기계에열린 창을 열 때 포커스가 적용되도록합니다.

var window = new Window(); 
window.Topmost = true; 
window.Show(); 
window.Activate(); 
window.Topmost = false; 

, 첫 번째 창 (만 첫 번째 창) : 여기

는 WPF 창을 실행하기 위해 호출되는 코드입니다 . 그것은 C++ 응용 프로그램 앞에 있지만 C++ 응용 프로그램에는 여전히 키보드 포커스가 있습니다. 매번 키보드 포커스를 가져 오도록 WPF 창을 강제로 수행 할 수있는 다른 방법이 있습니까?

+0

'window.Focus()'가 처리해야합니다. – evanmcdonnal

+0

'window.Focus()'는 매번 false를 반환합니다. – battmanz

+0

'window.Focus()'는 해당 윈도우에 포커스가 있는지 여부를 나타내는 부울 값을 반환합니다. 내 생각 엔'Focus()'를 호출 할 때 윈도우에 포커스가 없다는 것입니다. 그래서 항상 false가 될 것입니다. 윈도우 포커스를 주려면'window.Focus() = true;'를 사용하십시오. –

답변

1

그것은 window.Activate()false을 반환 한 것으로 나타났다. 그 방법의 documentation 보면, 그것은

활성화되는 윈도우는 Win32 SetForegroundWindow 함수 (로 User32.dll)에 의해 사용 된 것과 동일 여부를 결정하는 규칙을 말한다.

SetForegroundWindow에 대한 문서는 다음 상태 :

전경 창은 AllowSetForegroundWindow 함수를 호출하여 전경 창을 설정하는 다른 프로세스를 활성화 할 수 있습니다 설정할 수 있습니다 프로세스.

그래서 C++ 응용 프로그램에서 AllowSetForegroundWindow 함수를 사용하여 WPF 앱에 포 그라운드 창을 설정할 수있는 권한을 부여했습니다.

0

당신은 window.Focus()를 호출하려면 다음 true로 설정하는 Window에 속성 Focusable를 시도?

2

이 시도 :

var window = new Window();  
window.Show(); 
window.Activate(); 
window.Focus(); 
window.Topmost = true; 
window.Topmost = false; 
관련 문제