2011-09-02 2 views
3

나는 winapi를 사용하여 작은 C 응용 프로그램을 작성하고 있습니다. 거기에 자식 창이있는 창 (도구 상자)이 있습니다. 나는이 창 안쪽에 계속 머무를 수 있지만, 내 질문은 : 자식 창에 집중하면 기본 창을 활성 상태로 유지하는 방법은 무엇입니까?자식 창 (a.k.a 소유 창)의 부모 창을 winapi에서 활성 상태로 유지하는 방법은 무엇입니까?

현재이 주 창이 회색으로 표시됩니다. 여기

hMainWindow = DialogBoxParam(.......); 
hChildWindow = CreateDialogParam(..., hMainWindow, ...); 
ShowWindow (hChildWindow, SW_SHOW); 

두 창의 동작의 작은 이미지 :

The behaviour of the windows

+1

해결 아이 포커스가있는 경우, 다음 메인 윈도우는 포커스를 가질 수 있도록, 포커스가있는 것입니다. –

+0

어쩌면 이런식이 아니지만, Paint.NET이 가능하다는 것을 알고 있습니다. –

+0

"활성화"란 의미를 정의 하시겠습니까? MDI 창을 사용하고 있습니까? – jweyrich

답변

3

이 나는 ​​단순히 WS_CHILD로 작성하고 명시 적으로 하지WS_POPUP으로 그것을 해결하는 것을 발견했습니다. 또한 절대 윈도우 좌표를 상대 좌표로 바꾸어 부모 윈도우를 움직여 창 위치를 더 이상 신경 쓰지 않아도됩니다.

// 활성 창 AFAIK

1

가 대신 모덜리스 대화 상자 자식 창을 만들기

창문

에 의해 만들어 얻을 모달 한 따라서 DialogBox을 사용하는 대신 CreateDialog

+0

나는 이미 그렇게하고있다. hPanel = CreateDialogParam (......); ShowWindow (hPanel, SW_SHOW); –

+0

그렇다면 나는 내가 추측하는 질문을 이해하지 못한다. '활성'창이 하나만있을 수 있습니다. 최상위 창은 항상 초점을 맞 춥니 다. –

+0

@Mike Kwan의 대답은 항상 나를 위해 일해 왔습니다. 상위 창을 전혀 선택할 수 없다는 것을 의미합니까? 아니면 창을 만들 때 창 창에 초점을 맞추기를 원하지 않는다는 뜻입니까? –

1

죄송합니다. Windows의 작동 방식이므로 한 번에 하나의 활성 창만 사용하십시오.

도구 창으로 찾기 및 바꾸기를 실행하면 Visual Studio에서이를 볼 수 있습니다.이 도구는 활성화되고 기본 VS 창이 비활성 상태로 표시됩니다.

둘 다 동시에 활성화하려는 경우 사용자와 화면 판독기와 같은 접근성 도구를 혼란스럽게 할 수 있습니다.

+0

예, 맞습니다. 패널로 만들어야하지만, C에서 패널은 캡션없는 창과 같은 방식으로 할 것입니다. 그래서 문제가 남아 있습니다. 아니면 다른 가능성이 있습니까? –

관련 문제