chaoskcuf's lab

POST : 프로그래밍/TIP& Study

[MFC 9.0] Application Wizard Bug 하나

MFC 9.0 Feature Pack을 설치한 후 Application Wizard가 생성하는 코드 중에 약간의 버그에 있다.
기본 옵션에서 두가지만 설정을 바꾸어서 App Wizard가 생성해준 프로젝트를 빌드하려고 하면
컴파일 에러가 나게 되는데, 간단히 재연해보면

1. 아래의 [그림1]과 같이 Application Type을 정하는 부분에 Enable visual style switching  체크박스를 언체크한다.
(기본은 체크가 된 상태이다)

AppType
[그림 1, Application Type]


2. 아래의 [그림 2]와 같이 User Interface Features를 설정하는 부분에서 Use a ribbon을 라디오 버튼을 선택한다.
(기본으로 Use a menu bar and toolbar가 선택되어 있다.)

UIFeatures
[그림 2, User Interface Features]


즉, 위의 세팅은 Project Style은 Visual Studio Style로 하고 RibbonBar를 사용하게 끔하는 것이었다. 또한 Visual Style Switching을 제공하지 않기 위해 그 부분을 체크해제 한 상태이다.

error
[그림 3, Error 화면]

Application Wizard가 생성해준 코드를 바로 빌드하면 [그림 3]과 같은 에러 화면을 볼 수 있다.

// Add elements to the right side of tabs:
    strTemp.LoadString(IDS_RIBBON_STYLE);
    CMFCRibbonButton* pVisualStyleButton = new CMFCRibbonButton(-1, strTemp, -1, -1);

    pVisualStyleButton->SetMenu(IDR_THEME_MENU, FALSE /* No default command */, TRUE /* Right align */);

    strTemp.LoadString(IDS_RIBBON_STYLE_TIP);
    pVisualStyleButton->SetToolTipText(strTemp);
    strTemp.LoadString(IDS_RIBBON_STYLE_DESC);
    pVisualStyleButton->SetDescription(strTemp);
    m_wndRibbonBar.AddToTabs(pVisualStyleButton);


에러 내용을 보면 IDR_THEME_MENU 메뉴 리소스를 찾을 수가 없다는 에러인데,
Enable visual style switching  옵션을 꺼버렸기 때문에 Visual Style을 선택할 수 있게 하는 메뉴 IDR_THEME_MENU는 빠진 것이다.
그러나 메뉴리소스는 빠져있는데 코드상으로는 위와 같은 불필요한 부분이 포함된 것이다.
(또한, 컴파일 에러로 빌드까지 되지 않는 상황이다.)

컴파일 에러는 단순히 위의 코드를 주석처리하는 것으로 간단히 해결할 수 있다.
다시 빌드 하면 아래 [그림 4]와 같은 UI를 볼 수 있다.

그런데 왠지 모를 약간의 덜 다듬어진 것 같은 느낌이 든다.
Docking Pane은 그대로 사용하고 전체적인 스타일은 Office 2007과 같이 가고 싶다면, CMainFrame::OnCreate 함수 부분에

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));

와 같은 부분을

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));

로 바꾸어주면 Office2007 Style로 쉽게 변경이 가능하다.

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);

그리고 만약 Office 2007의 다른 Look&Feel을 원한다면 위의 4개의 Style중 하나를 넣어주면 된다.

사실 위와 같은 방법은 Visual Studio Project Style을 Office 2007 Style로 바꾼 것이다.
다시 말해 'Visual Studio Style이 아니다' 라는 것이고 오해가 없길 바란다.

결론적으로 이 포스트에서 언급하고자한 바는
Application Wizard가 생성하는 코드에 지정상적인 부분이 있다는 것이고,
아직 Visual Studio Style과 Ribbon은 궁합이 잘 맞지 않는 다는 것이다.

한가지더.
[그림 2] UI Features에 Use a ribbon을 먼저 선택하고, [그림 1]에서 Enable Visual Style switching을 끄면 어떻게 될까?

컴파일 에러가 나지 않는다.
대신 Use a ribbon을 선택한 것이 무시된다.



chaoskcuf's lab
2008/02/25 11:45 2008/02/25 11:45
top

posted at

2008/02/25 11:45


◀ recent : [1] : ... [37] : [38] : [39] : [40] : [41] : [42] : [43] : [44] : [45] : ... [153] : previous ▶

CONTENTS

chaoskcuf's lab
BLOG main image
WPF, Silverlight, C#, MFC 프로그래밍 팁, 자작 프로그램 개발
RSS 2.0Tattertools 믹시
최근 글 최근 댓글 최근 트랙백
카테고리
사이트 링크