티스토리 뷰
목차
작업 중 다이얼로그가 포커스를 잃으며 아무런 반응이 없을 때가 있습니다.
이럴 경우 고객사에선 프로그램이 먹통되었다, 다운되었다, 라면서 컴퓨터를 강제 종료하거나 Ctrl + Alt + Del 키를 눌러 강제 종료하기도 해요.
기본적으론 MFC Dialog 활성화 여부가 false(= EnableWindow(FALSE))로 설정되어서 그렇습니다.
다이얼로그를 종료하는 거라면 상관없는데, 해당 다이얼로그에서 계속 작업해야 한다면 EnableWindow(TRUE) 라는 소스 코드를 삽입해 제어 가능하도록 변경해야 합니다.
소스 간단! 순서는 아래!
- 해당 다이얼로그가 비활성화 되었느냐?
- 그럼 활성화 해라!
- 그외 작업도 진행해라
아래 코드를 먹통되는 소스 뒷 부분에 추가하면 됩니다.
1 2 3 4 5 6 | if (::IsWindow(this->GetSafeHwnd()) != NULL) { this->EnableWindow( TRUE ); blabla.SetFocus(); } | cs |
1번, 3번이 MFC Dialog 활성화(= 포커스)를 결정하는 부분입니다.
if문 안에 기타 다른 작업을 해주셔도 됩니다. 5번 라인은 회사에서 필요하여 추가한 부분이네요.
어려운 부분 없습니다. 소스 코드 그대로 넣으면 됩니다. 모달리스, 부모 자식 모달 등 여러개 띄우기할 때 빈번하게 발생하는 문제니깐 되도록 문제가 없더라도 일단 코드를 삽입해 두는 게 좋겠다는 생각이 듭니다.
그래야 포커스 유지도 지속되고 항상 위 상태로 사용자가 사용할 수 있으니깐요.
MFC 관련 글
다이얼로그 스크롤바 생성
https://codingcoding.tistory.com/707
dll에서 다이얼로그 생성이 안 될때
https://codingcoding.tistory.com/203
스크롤바 동적 생성
https://codingcoding.tistory.com/57
다이얼로그 항상 위로 설정