2010년 10월 1일 금요일

예쁜 메뉴 - NewMenu

[그림 1] NewMenu의 실행 모습(출처: podetti.com)

응용프로그램의 frame window, toolbar, statusbar, menu, dialog 등을 예쁘게 꾸미려면 Bruno Podetti가 만든 NewMenu를 사용하면 된다.

1. CMainFrm 클래스(class)의 부모 클래스를 CFrameWnd -> CNewFrameWnd으로 바꾼다.
class CMainFrame : public CNewFrameWnd
{
...
}

2. CMainFrm 클래스의 컨트롤용 멤버 변수(member variable for controls)를 CStatusBar -> CNewStatusBar, CToolBar -> CNewToolBar로 바꾼다.
protected: // 컨트롤 모음이 포함된 멤버입니다.
CNewStatusBar m_wndStatusBar;
CNewToolBar m_wndToolBar;

3. CMainFrm 클래스의 소스 파일(source file)인 "MainFrm.cpp"로 가서 바꾸기 기능을 이용해 CFrameWnd -> CNewFrameWnd으로 바꾼다.

4. OnCreate 함수에 아래 code를 추가한다.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...

m_DefaultNewMenu.LoadToolBar(IDR_MAINFRAME);

// TODO: 도구 모음을 도킹할 수 없게 하려면 이 세 줄을 삭제하십시오.
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}

5. 응용프로그램의 InitInstance 함수로 가서 아래 code를 추가한다.
BOOL CAntPhaseApp::InitInstance()
{
...
AddDocTemplate(pDocTemplate);

// Set the drawing style of all menus to XP-Mode or STYLE_ORIGINAL
CNewMenu::SetMenuDrawMode(CNewMenu::STYLE_XP_2003);
CNewMenu::SetGloomFactor(0);

// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

...
}

SetMenuDrawMode 함수는 NewMenu를 다양한 색깔로 그릴 수 있도록 옵션을 선택한다. SetGloomFactor 함수는 toolbar의 비트맵(bitmap)의 흐린 정도를 설정한다.

6. toolbar의 색깔을 하이컬러(high color)로 만들려면 더 복잡한 과정을 거쳐야 한다.

1) 먼저 "리소스 뷰"를 이용해서 Bitmap으로 toolbar용 비트맵을 읽어들인다. 예를 들어 이 비트맵의 리소스(resource) 이름을 "IDR_TOOLBAR256"이라 한다.

2) "MainFrm.cpp" 파일 상단에 아래의 정적 변수(static variable)를 추가한다.
static WORD ToolId[] = { IDR_TOOLBAR256,
16, 15,
ID_FILE_NEW,
ID_FILE_OPEN,
ID_FILE_SAVE,
ID_EDIT_CUT,
ID_EDIT_COPY,
ID_EDIT_PASTE,
ID_FILE_PRINT,
ID_APP_ABOUT,
NULL};

3) "MainFrm.cpp" 파일에 있는 OnCreate 함수에 아래 code를 추가한다.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CNewFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("도구 모음을 만들지 못했습니다.\n");
return -1;      // 만들지 못했습니다.
}
m_wndToolBar.SetWindowText(_T("기본동작 도구모음"));
m_wndToolBar.LoadHiColor(MAKEINTRESOURCE(IDR_TOOLBAR256));

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
 sizeof(indicators)/sizeof(UINT)))
{
TRACE0("상태 표시줄을 만들지 못했습니다.\n");
return -1;      // 만들지 못했습니다.
}

m_DefaultNewMenu.LoadToolBar(ToolId, RGB(192, 192, 192));

// TODO: 도구 모음을 도킹할 수 없게 하려면 이 세 줄을 삭제하십시오.
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}

댓글 없음 :

댓글 쓰기

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.