MFC 에서 윈도우 클래스명 변경
모처럼 강좌로 인해 MSDN 을 뒤적이다가 이런 것을 발견했습니다.
음…이건 어떤 회사들한테는 유용한 팁이라는 군요…
보통 win api 는 쉽게 클래스명을 바꿀수 있지만 MFC 는 좀 숨겨져 있군요…이걸 좀 알았습니다…
Spy++로 다이얼로그 기반의 프로그램을 찍어보면 클래스의 기본값이 “#32770”으로 적혀져 있는데
이걸 바꾸는 팁입니다…음…엠에스디엔을 뒤적이다 적은 거라서….뒷북일 것이냐 아니면 큰 볼거리는 안되겠네요
하여간 적어 본다면 우선 주의할 점은 다이얼로그 기반의 클래스 명 바꾸는 것이 SDI 나 MDI 에서는 통하지 않습니다…
이건 또 찾아보아야…긁적…
app 분야에 요걸 적어 주시구…
1
2
3
4
5
6
7
8
9
10
11
12
BOOL CLimitDlgInstanceApp::InitInstance()
{
WNDCLASS wc;
// 바꾸고자 하는 클래스명임돠...
wc.lpszClassName = "MyPrivateClassName";
// Register this class so that MFC can use it.
AfxRegisterClass(&wc);
생략.....
}
그리고 rc 파일을 텍스트 기반으로 읽으셔서
코딩함돠…
1
2
3
4
5
6
7
8
9
10
11
IDD_LIMITDLGINSTANCE_DIALOG DIALOGEX 0, 0, 195, 44
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "LimitDlgInstance"
CLASS "MyPrivateClassName" // 여기를 추가....
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,138,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,138,23,50,14
PUSHBUTTON "&Test!",IDC_BUTTON1,48,14,49,15
END
spy로 검사해 보시면 값이 바뀌어 있슴을 알수 있습니다….
그럼…
안녕하세요….
좋은 글 적어주신 것 감사합니다..
적으신 내용중에 빠진 부분이 있어서 추가합니다….
위의 글처럼 하시면 프로그램이 그냥 종료해 버릴 것입니다…
이유는 wc.cbWndExtra 에 값이 없기 때문입니다… 그렇다고 이 값과 클래스명만 입력한다고 되는 것은 아닙니다..
나머지 필요한 것들도 입력을 해 주셔야만 합니다…
간편하게는 다음과 같이 하시면 됩니다… (MSDN에 나오는 내용입니다)
1
2
3
4
5
6
7
8
9
// Change the name of the class.
::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wndClass);
// Register this class so that MFC can use it.
wndClass.lpszClassName = _T("ComicsViewerByMirjini");
AfxRegisterClass(&wndClass);
또는 직접 WNDCLASS 의 인자값들을 넣어주시면 됩니다…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 윈도우 클래스명 지정
WNDCLASS wndClass;
::ZeroMemory(&wndClass, sizeof(WNDCLASS));
wndClass.lpfnWndProc = ::DefDlgProc;
wndClass.hInstance = AfxGetInstanceHandle();
wndClass.hCursor = LoadCursor(IDC_ARROW);
wndClass.lpszMenuName = NULL;
wndClass.style = 2056;
// wndClass.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndClass.cbWndExtra = DLGWINDOWEXTRA;
wndClass.lpszClassName = _T("ComicsViewerByMirjini");
BOOL bRet = AfxRegisterClass(&wndClass);
if(!bRet)
{
AfxMessageBox("윈도우 클래스 등록에 실패하였습니다. 프로그램을 종료합니다.");
return FALSE;
}
아래는 MSDN에 있는 것이니 직접 찾아서 보시기 바랍니다… 몇 가지 사항이 더 있으니까요…
참고로 WNDCLASS에 대해서도 찾아보시면 좋겠네요….
HOWTO: Provide Your Own Window Class Name for an MFC Dialog Box(Q251059)
** MDI, SDI는 메인프레임의 PreCreateWindow 에서 기반 함수 호출전에 cs 의 클래스명을 입력하신 후 호출하시면 됩니다…
| [출처] MFC 에서 윈도우 클래스명 변경 | 작성자 solaris1 |