Clock Dialog

 이번에 소개할 코드는 프로그램이 실행될 때 나타날 시계이다. 프레임 윈도우 클래스에서 모달리스 다이얼로그 박스로 만들어진다. 메뉴에 따라 디지털과 아날로그의 두 가지 형태가 있다.

1. 우선 소스를 받고... clock.cpp와 clock.h 파일을 프로젝트에 추가

2. clock.rc 파일을 열어 포함된 비트맵, 메뉴, 다이얼로그 템플릿을 프로젝트에 복사해 넣는다.

3. 다른 모듈에 넣어도 상관없지만 여기선 메인 프레임 클래스에서 만들어지게 할 것이고, 메뉴에 이 시계가 보이거나 안보이게 하는 항목을 추가할 것이다. 메인 프레임의 헤더파일에 다음과 같이 인클루드한다.

4. 클래스뷰에서 메인 프레임에 다음 두 변수를 정의한다.

        BOOL m_bVisible;
        CClockDialog* pClockDlg;    

5. 메인 프레임의 생성자와 소멸자를 다음과 같이 고친다.

CMainFrame::CMainFrame()
{
        // TODO: add member initialization code here
        pClockDlg = new CClockDialog;
        m_bVisible = FALSE;    
// 변수 초기화
}

CMainFrame::~CMainFrame()
{
        if(pClockDlg->GetSafeHwnd()!=0)
                pClockDlg->DestroyWindow();
        delete pClockDlg;
}

6. OnCreate 함수에 다음 굵은 글씨 한 줄을 삽입한다.

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        ...........................
        ........................... 
        // TODO: Delete these three lines if you don't want the toolbar to
        //  be dockable
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndToolBar);

        pClockDlg->Create();    // 시계 다이얼로그를 나타나게 한다.

        return 0;
}

7. 시계 다이얼로그가 보이거나 안보이게 하는 메뉴를 추가한다.

   메뉴 - 시계 보이기 - ID : ID_CLOCK_VISIBLE
             시계 감추기 - ID : ID_CLOCK_INVISIBLE

8. 7번 메뉴에 대한 핸들러를 구현한다. 알다시피 OnClockVisible() 함수와 OnClockInvisible() 함수는 시계 다이얼로그가 보이거나 안보이게 하는 핸들러이고, 나머지 밑의 두 함수는 추가한 메뉴가 필요할 때만 보이도록 하는 핸들러이다.

void CMainFrame::OnClockVisible()
{
        // TODO: Add your command handler code here
        m_bVisible = FALSE;
        pClockDlg->Create();

}

void CMainFrame::OnClockInvisible()
{
        // TODO: Add your command handler code here
        m_bVisible = TRUE;
        pClockDlg->DestroyWindow();

}

void CMainFrame::OnUpdateClockVisible(CCmdUI* pCmdUI)
{
        // TODO: Add your command update UI handler code here
        pCmdUI->Enable(m_bVisible);
}

void CMainFrame::OnUpdateClockInvisible(CCmdUI* pCmdUI)
{
        // TODO: Add your command update UI handler code here
        pCmdUI->Enable(!m_bVisible);
}