MFC실행 순서에 대해서는 아래 링크 참조
http://wjsb.tistory.com/8
http://aesire.tistory.com/17
이전에 다국어 대응을 하던 도중, 프래임의 메뉴에 대한 다국어 대응이 죽어도 안되더라...
그래서 이 부분에 대해서는 도저희 처리 못하겠다하여 넘겼더니
해결해서 보내줬다.
해결방법은 정말 간단했다.
void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CMDIFrameWndEx::OnActivate(nState, pWndOther, bMinimized);
#ifdef _BUG_899
HMENU hMenu = m_wndMenuBar.GetDefaultMenu();
CMenu* pMenu = CMenu::FromHandle(hMenu);
if(pMenu != NULL)
theApp.m_Translag.GetMenuTranse(MENU, pMenu); //** 다국어 변환 대응 함수. 대응 함수는 직접 만드시길.(CMenu를 이용하여 만듬)
m_wndMenuBar.CreateFromMenu(hMenu, true, false); //** 변환 후 재 생성
#endif
switch (nState) {
case WA_ACTIVE:
if (theApp.m_pMainWnd != this) {
theApp.m_pMainWnd = this;
}
break;
default:
/* do nothing */
break;
}
}
BUG_899에 해당하는 부분이 프래임 메뉴의 다국어 대응 처리.
이전에 직접 대응할 때는 onCreate나 Initinstance쪽에서 메뉴 포인터 값을 받아
문자열을 변경해주었는데
MainFrame의 경우는 조금 달랐다.
OnCreate함수에서 메뉴 재 생성 후 변경해도 되지 않음.
ON_UPDATE_COMMAND_UI 메세지를 추가해줘도
일부는 변경되지만 일부는 변경 안되는 문제가 있었음.
3주동안 이 문제로 헤매다가 도저희 해결 방안이 없어서 그냥 패스.
그리고 해결방안 온 녀석이 위의 코드.
BUG_899에 쓰여진 코드들이 내가 이전에 작업했던 코드 내용과 동일.
다만 쓰여진 함수가 OnCreate나 Initinstance가 아닌
OnActivate함수....
왜 여기에 쓰여졌을까.. 의문이 들어 찾아보고 있는 중...
혹시 저처럼 Main프레임 클래스에서 메뉴를 수정 했는데도 불구 하고 수정이 되지 않는 분들은
OnActivate함수에서 수정해보시길...
댓글 없음 :
댓글 쓰기