거대한 Win32 GUI 응용 프로그램을 디버깅하려고합니다. 전체 소스가 여러 프로세스로 나뉘어져 있습니다. 문제는 다음과 같습니다. 한 프로세스에서 목록 상자가있는 대화 상자가 표시됩니다. 목록 상자에서 항목을 두 번 클릭하면 다른 프로세스가 시작되어 앞쪽으로 이동하여 초기 대화 상자를 덮는 자체 창을 만듭니다. (아직 완전히 이해할 수 없기 때문에 아직 설명 할 수없는) 조작을하면 초기 대화 상자가 작업 표시 줄에서 깜박이기 시작합니다. 정확히 어떤 경우 WM_ACTIVATE가 전송됩니까?
나는 마이크로 소프트 스파이를 시도 ++ 내가 조작 WM_ACTIVATE이 대화로 전송 그렇게 할 때마다, 시대의 대부분은 이러한 매개 변수가 있음을 참조하십시오fActive: WA_INACTIVE fMinimized:False hwndPrevious:(null)
그 경우에
대화가 깜박이기 시작하지 않습니다 . 그러나 잠시 동안 매개 변수는fActive: WA_ACTIVE fMinimized:False hwndPrevious:(null)
이고 정확히 깜박이는 대화 상자에 해당합니다. 윈도우가 마우스 클릭 이외의 다른 방법으로 활성화 때
MSDN says WM_ACTIVATE은 WA_ACTIVE 함께 전송됩니다 (예를 들어, SetActiveWindow 함수 또는 키보드 인터페이스를 사용하여 호출하여 창을 선택합니다).
이제 응용 프로그램 코드에서 SetActiveWindow()는 호출되지 않으며 Windows 전환이 가능한 키보드로는 아무 것도하지 않습니다.
WA_ACTIVE와 함께 WM_ACTIVATE를 보내는 다른 이유는 무엇입니까?
대화 상자의 경우 활성화 된 것을 막을 수 있습니다. OnInitDialog에서 FALSE를 반환해야하고 대화 상자가 WS_VISIBLE 스타일이 아닌 모덜리스로 만들어 져야하고 ShowWindow로 표시해야합니다. (SW_SHOWNA) – Hyksos