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를 하면 문제없이 실행되는 것을 확인할 수 있다.
'Tips' 카테고리의 다른 글
크롬(엣지)에서 티스토리 관리자 모드 카테고리 이동 방법 (1) | 2024.12.31 |
---|---|
The emulator process for AVD .. has terminated 문제 해결 (1) | 2022.04.13 |
Visual Studio(VS) Code C++ 기존 MinGW 연동하기 (4) | 2021.01.17 |
Visual Studio(VS) Code에 비주얼 스튜디오 블루(Blue) 테마 확장 설치법 (0) | 2021.01.17 |
RAND_MAX 이상의 큰 수 범위의 랜덤(random) 값 구하기 (0) | 2020.09.30 |