Tips
Win32/MFC 다이얼로그 생성(DoModal/Create) 시 ERROR_CANNOT_FIND_WND_CLASS[1407(0x57F)] 문제 해결
swJman
2021. 3. 31. 14:56
Win32/MFC 다이얼로그(dialog) 기반 프로그래밍 시 다양한 용도로 활용하기 위해 CLASS를 별도로 등록해서 쓰는 경우가 있다. 예를 들어,
#define MYCLASSNAME L"RandMP3"
CNormalGUIDlg::CNormalGUIDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CNormalGUIDlg::IDD, pParent)
{
...
WNDCLASS wc = {};
::GetClassInfo(AfxGetInstanceHandle(), L"#32770", &wc);
wc.lpszClassName = MYCLASSNAME;
AfxRegisterClass(&wc);
...
}
이런 식으로 등록을 해두면 FindWindow 류를 손쉽게 활용할 수 있다.
그런데 DoModal이나 Create, CreateDlgIndirect 등을 호출하면 갑자기 ERROR_CANNOT_FIND_WND_CLASS [1407(0x57F)] 를 맞는 경우가 생긴다. (GetLastError로 확인)
여러가지 이유가 있을 수 있는데, 여기서는 그 중 한가지를 짚어 본다.
프로젝트 폴더의 .rc 확장자 파일을 텍스트 에디트 모드로 연다. 그 다음 CLASS 라는 항목을 찾아 본다. 아래의 예와 같이 나올 것이다. 없다면 해당 DLG 코드에 삽입하자.
| ... IDD_NORMALGUI_DIALOG DIALOGEX 0, 0, 306, 148 STYLE DS_SETFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_APPWINDOW CAPTION "RandMP3" CLASS "NewRandMP3" ... |
위와 같이 내가 등록한 CLASS명(RandMP3)과 RC 파일의 CLASS명(NewRandMP3)이 상이한 경우 위의 에러를 맞을 수 있다.
통일해서 저장을 한후 rebuild를 하면 문제없이 실행되는 것을 확인할 수 있다.