2010-06-04 5 views
1

MFC에 궁금한 문제가 발생했습니다. 유효한 경우 ON_EN_KILLFOCUS의 모든 편집 필드를 확인하는 대화 상자가 있습니다. 유효성 검사가 끝나지 않으면 포커스를 다시 설정하고 오류 메시지를 표시합니다. 대화 상자를 닫을 수만 있다면 괜찮을 것입니다. 필드를 잘못 입력하고 닫기 버튼 또는 X를 누르면 다른 처리 이벤트가 발생한 후 ON_EN_KILLFOCUS가 먼저 호출됩니다. 메시지가 나타나고 포커스가 다시 필드로 이동하기 때문입니다. 그래서 내 질문 : ON_EN_KILLFOCUS 후 어떤 이벤트가 될 알아낼 수있는 방법이 있나요? 그렇다면 그 닫기 이벤트가 있는지 확인한 다음 대화 상자를 닫고 잘못 입력 한 편집 필드로 포커스를 되돌릴 수 없습니다. 어떤 도움이라도 많은 도움이 될 것입니다!MFC에서 어떤 두 번째 이벤트가 발생하는지 확인하는 방법이 있습니까

답변

2

일반적으로 포커스가 변경된 이벤트 이후에 오는 이벤트를 알 수 없습니다.

  • 초점이
  • 손실되고 초점이 다른 편집 컨트롤에 손실 된 경우 편집 컨트롤의 유효성을 검사 -

    그러나, 당신은 검증 로직이 발사 될 때 조건을 변경이 문제를 해결할 수있다

다른 컨트롤에 포커스가 손실되었는지 확인하여 사용자에게 "이 구성 요소로 이동하지 말고 현재 현재 올바르게 입력하지 않았습니다!"라고 말합니다.

포커스 변경시 유효성 검사보다 사용자의 의도를 더 잘 포착합니다. 또한 사용자가 닫기 또는 시스템 X 단추 또는 다른 단추를 클릭 할 때 유효성 검사를 실행하지 않습니다. 물론, 확인 버튼을 클릭하면 명시적인 유효성 검사를 추가해야합니다.

새 포커스 창은 대화 상자의 자식이고 입력 구성 요소인지 확인하는 것만 큼 (창의 포커스 인 창 클래스 이름을보고 입력 구성 요소라고 판단 할 수 있습니다.) EDIT

또한 사용자가 시스템 메시지 상자 또는 다른 포커스 잡기 이벤트와 같은 다른 이유로 포커스를 이동하는 경우도 다룹니다. 포커스가 다른 편집 컨트롤 중 하나로 이동하지 않으므로 유효성 검사가 실행되지 않고 포커스가 응용 프로그램으로 다시 강제되지 않으므로 일부 사용자에게는 상당히 성가 시게됩니다!

관련 문제