MFC TiltleBar(타이틀 바) 글씨 변경하기




 

 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;
}


(Tip)
 MFC로 SDI 프로젝트 생성 시  기본적으로 생성되는 윈도우 스타일에는  FWS_ADDTOTITLE  스타일이 추가 된다.
 FWS_ADDTOTITLE  는 프레임 워크에서 창의 캡션에 문서 제목을 추가하도록 명령하는  MFC 관련 스타일 이다.
 이 속성을 제거해야 타이틀 바의 이름이 변경되지 않음을 확신 할 수 있다.

BOOL CMainFrmae::PreCreateWindow(CREATESTRUCT& cs); 

      // 이미 설정된 정보에서 FWS_ADDTOTITLE 속성의 제거.. 
      cs.style &= ~FWS_ADDTOTITLE; 
      // cs.style = cs.style & (~FWS_ADDTOTITLE); 
      return CFrameWnd::PreCreateWindow(cs); 

Posted by six605
,