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