MFC Class 이름 변경

2017. 3. 10. 16:56IT-개발/winapi 및 MFC

반응형

(펌) https://www.codeproject.com/Articles/196354/Provide-Your-Custom-Class-Name-to-your-MFC-Applica



위 예제는 SDI, Dialog base 2가지에 대해서 있다. 그중에 SDI 쪽은 정상적으로 Class Name이 변경 되고 build해서


실행되지만, Dialog Base 쪽은 정상적으로 동작 하지 않더라.


MFC 로 만든 프로그램의 Class를 변경할 일이 자주는 없는데, 간혹 있더라...


필요할때, 잘 적용하길~, 핵심 코드는 아래에 추가


(SDI)


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

if( !CFrameWnd::PreCreateWindow(cs) )

return FALSE;


// Just clear the styles we don't want.

cs.dwExStyle &= ~WS_EX_CLIENTEDGE;


   // 요기부터가 핵심

// Check if our class is already defined

LPCTSTR pszClassName = _T("OwnClassName");


WNDCLASS wndcls;

if (!::GetClassInfo(AfxGetInstanceHandle(), pszClassName, &wndcls))

{

// Get the current requested window class

VERIFY(GetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wndcls));


// We want to register this infos with our name

wndcls.lpszClassName = pszClassName;


// Need to preset the icon otherwise the function GetIconWndClass

// calling us will overwrite our class.

LPCTSTR pszIcon = MAKEINTRESOURCE(IDR_MAINFRAME);

HINSTANCE hInst = AfxFindResourceHandle(pszIcon, ATL_RT_GROUP_ICON);

_ASSERTE(hInst!=NULL);

wndcls.hIcon = ::LoadIcon(hInst, pszIcon);


// Register our class now and check the outcome

if (!::RegisterClass(&wndcls))

{

_ASSERTE(!__FUNCTION__ "RegisterClass failed");

return FALSE;

}

}


// Now use our class 

cs.lpszClass = pszClassName;

return TRUE;

}


MFC SDI 로 만든건 class name이 아래 처럼 나오던데~ 이렇게 하면 원하는 class name으로 변경가능하다.

"AFx00..."