본문 바로가기
C++ 200제/코딩 IT 정보

mfc EnableWindow 다이얼로그 포커스로 무반응 해결

by vicddory 2019. 7. 11.

작업 중 다이얼로그가 포커스를 잃으며 아무런 반응이 없을 때가 있습니다.


이럴 경우 고객사에선 프로그램이 먹통되었다, 다운되었다, 라면서 컴퓨터를 강제 종료하거나 Ctrl + Alt + Del 키를 눌러 강제 종료하기도 해요.


기본적으론 MFC Dialog 활성화 여부가 false(= EnableWindow(FALSE))로 설정되어서 그렇습니다.


다이얼로그를 종료하는 거라면 상관없는데, 해당 다이얼로그에서 계속 작업해야 한다면 EnableWindow(TRUE) 라는 소스 코드를 삽입해 제어 가능하도록 변경해야 합니다.


소스 간단! 순서는 아래!


  1. 해당 다이얼로그가 비활성화 되었느냐?
  2. 그럼 활성화 해라!
  3. 그외 작업도 진행해라


아래 코드를 먹통되는 소스 뒷 부분에 추가하면 됩니다.


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


다이얼로그 항상 위로 설정

https://codingcoding.tistory.com/189

댓글