모처럼 강좌로 인해 MSDN 을 뒤적이다가 이런 것을 발견했습니다.
음...이건 어떤 회사들한테는 유용한 팁이라는 군요...
보통 win api 는 쉽게 클래스명을 바꿀수 있지만 MFC 는 좀 숨겨져 있군요...이걸 좀 알았습니다...
Spy++로 다이얼로그 기반의 프로그램을 찍어보면 클래스의 기본값이 "#32770"으로 적혀져 있는데
이걸 바꾸는 팁입니다...음...MSDN을 뒤적이다 적은 거라서....뒷북일 것이냐 아니면 큰 볼거리는 안되겠네요
하여간 적어 본다면 우선 주의할 점은 다이얼로그 기반의 클래스 명 바꾸는 것이 SDI 나 MDI 에서는 통하지 않습니다...
이건 또 찾아보아야...긁적...
app 분야에 요걸 적어 주시구...
그리고 rc 파일을 텍스트 기반으로 읽으셔서
코딩함돠...
spy로 검사해 보시면 값이 바뀌어 있슴을 알수 있습니다....
그럼...
안녕하세요....
좋은 글 적어주신 것 감사합니다..
적으신 내용중에 빠진 부분이 있어서 추가합니다....
위의 글처럼 하시면 프로그램이 그냥 종료해 버릴 것입니다...
이유는 wc.cbWndExtra 에 값이 없기 때문입니다... 그렇다고 이 값과 클래스명만 입력한다고 되는 것은 아닙니다..
나머지 필요한 것들도 입력을 해 주셔야만 합니다...
간편하게는 다음과 같이 하시면 됩니다... (MSDN에 나오는 내용입니다)
참고로 WNDCLASS에 대해서도 찾아보시면 좋겠네요....
HOWTO: Provide Your Own Window Class Name for an MFC Dialog Box(Q251059)
** MDI, SDI는 메인프레임의 PreCreateWindow 에서 기반 함수 호출전에 cs 의 클래스명을 입력하신 후 호출하시면 됩니다...
[출처] MFC 에서 윈도우 클래스명 변경 |작성자 solaris1
음...이건 어떤 회사들한테는 유용한 팁이라는 군요...
보통 win api 는 쉽게 클래스명을 바꿀수 있지만 MFC 는 좀 숨겨져 있군요...이걸 좀 알았습니다...
Spy++로 다이얼로그 기반의 프로그램을 찍어보면 클래스의 기본값이 "#32770"으로 적혀져 있는데
이걸 바꾸는 팁입니다...음...MSDN을 뒤적이다 적은 거라서....뒷북일 것이냐 아니면 큰 볼거리는 안되겠네요
하여간 적어 본다면 우선 주의할 점은 다이얼로그 기반의 클래스 명 바꾸는 것이 SDI 나 MDI 에서는 통하지 않습니다...
이건 또 찾아보아야...긁적...
app 분야에 요걸 적어 주시구...
BOOL CLimitDlgInstanceApp::InitInstance()
{
WNDCLASS wc;
// 바꾸고자 하는 클래스명임돠...
wc.lpszClassName = "MyPrivateClassName";
// Register this class so that MFC can use it.
AfxRegisterClass(&wc);
생략.....
}
그리고 rc 파일을 텍스트 기반으로 읽으셔서
코딩함돠...
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에 나오는 내용입니다)
/* 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 의 인자값들을 넣어주시면 됩니다...// 윈도우 클래스명 지정
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
댓글
댓글 쓰기