타이틀 바의 제목 변경하기

이 내용은 '따라해보세요 Visual C++ 6'에서 참고한 내용입니다.

 

 MFC에서 윈도우의 제목을 변경하는 방법에는 여러 가지가 있다.

 

(방법 1)  

 ->         

CWinApp에서 파생한 클래스의 InitInstance()에서 CWnd의 멤버함수 SetWindowText를 사용한다.

새 파일을 열게 되면 원래대로 바뀐다. 계속 바뀐 제목을 유지하려면 파일을 열거나 새 파일을 선택할 때 불리는 함수에도 적당히 처리해 주어야 할 것이다.

        .................
        // The one and only window has been initialized, so show and update it.
        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();

        m_pMainWnd->SetWindowText("개인 정보관리");

        return TRUE;

 

(방법 2)

String Table에 필요한 내용을 보관한 다음 필요할 때(런타임시) 그 문자열을 로드하여 사용하는 방법이 있다.

1. String Table에 다음 그림과 같이 문자열 리소스를 추가한다. String Table 아무데나 추가해도 상관은 없다.

코드는 애플리케이션 클래스의 Initinstance()에서 다음과 같이 처리한다.

        // The one and only window has been initialized, so show and update it.
        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();

        CString strTitle;
        strTitle.LoadString(IDS_PIMTITLE);
        m_pMainWnd->SetWindowText(strTitle);

        return TRUE;
}

 

(방법 3)

 프로그램 코드를 수정하지 않고, String Table 에 있는 'IDR_MAINFRAME' 문자열의 맨 처음 문자열이 메인 프레임의 제목을 나타내기 때문에 이것을 '개인 정보관리'로 변경하는 수도 있다.

이렇게 하면 'IDR_MAINFRAME' 문자열의 2번째 문자열의 2번째 문자열(\n과 \n사이)에 아무 것도 저정되어 있지 않기 때문에 MFC 프레임워크는 메인 프레임의 제목에 '제목없음 - '라고 표시한다.

문서 이름과 애플리케이션의 이름을 바꾸려면 FWS_PREFIXTITLE 스타일을 제거하면 된다.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
        if( !CFrameWnd::PreCreateWindow(cs) )
                return FALSE;
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs
        
        cs.style &= ~FWS_PREFIXTITLE;
        return TRUE;
}

'제목없음 - '이라고 표시된 내용을 없애려면 CMainFrame 클래스에서 PreCreateWindow 메시지를 잡아 해당 문서 이름이 없을 때에 '제목없음 - ' 가 표시되게 하는 내용을 제거하도록 코드를 수정하는 것이다.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
        if( !CFrameWnd::PreCreateWindow(cs) )
                return FALSE;
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs

        cs.style &= ~FWS_ADDTOTITLE;
        return TRUE;
}

 

- the end of this article -