카테고리

  • 안드로이드
  • IOS
  • MFC
  • JAVA
  • AWS
  • LAMP
  • 여행&사진
  • 이런저런생활
  • 2016년 2월 14일 일요일

    [MFC] MFC의 실행 순서 및 메인 프래임의 메뉴 변경에 대한 고찰

    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함수에서 수정해보시길...

    댓글 없음 :

    댓글 쓰기