본문 바로가기

Programming/Win32&MFC&COM

AfxMessageBox의 타이틀 변경

반응형

MFC에서 AfxMessageBox를 이용해서 팝업 메시지를 띄우면 exe파일의 이름을 타이틀로 사용합니다.

MFCTest.exe에서 AfxMessageBox를 사용하면 다음과 같이 타이틀이 표시됩니다.

AfxMessageBox(_T("Popup Test"));

화면에 다음과 같이 표시가 됩니다.

MFCTest라는 타이틀로 표시가 됩니다.

기본적인 타이틀 대신 새로운 타이틀로 사용하는 방법은 다음과 같습니다.

1. exe 파일명 변경

가장 간단한 방법은 exe 파일명을 변경하는 방법입니다.

이 방법은 간단하지만 exe 파일명과 다른 타이틀을 사용하고 싶을 때는 사용할 수 없습니다.

2. Resource의 String Table에 AFX_IDS_APP_TITLE을 추가

String Table에 AFX_IDS_APP_TITLE이라는 ID를 추가합니다.

그리고 문자열을 입력하면 해당 문자열로 표시가 됩니다.

3. CWinApp의 생성자에 NULL 종료 문자열을 전달

프로젝트를 생성하면 프로젝트명과 동일한 cpp와 h 파일이 생깁니다.

MFCTest 프로젝트를 생성하면 MFCTest.h 파일이 존재합니다.

파일을 확인하면 다음과 같이 CWinApp을 상속받는 클래스를 확인할 수 있습니다.

class CMFCTestApp : public CWinApp

F12를 눌러서 CWinApp 클래스의 모양을 확인하면 다음과 같은 생성자를 확인할 수 있습니다.

// Constructor
	explicit CWinApp(LPCTSTR lpszAppName = NULL);     // app name defaults to EXE name

기본적으로 NULL값이 전달됩니다.

MFCTest.cpp 파일에서 CMFCTestApp을 생성하는 부분을 다음과 같이 변경하면 됩니다.

CMFCTestApp::CMFCTestApp() : CWinApp(_T("New Title"))

명시적으로 CWinApp에 문자열을 전달하면 해당 문자열로 표시가 됩니다.

4. CWinAppm_pszAppName 직접 수정

m_pszAppName은 AppName 정보를 가진 CWinApp의 멤버 변수입니다.

이 값을 직접 수정하면 되는데 다음과 같이 수정하면 종료시에 문제가 발생합니다.

m_pszAppName = _T("My Title");

m_pszAppName이 malloc으로 할당된 메모리를 참조하고 있기 때문입니다.

그래서 종료가 될 때 free를 호출해서 메모리를 해제합니다.

바꾸기 위해서는 다음과 같이 해야 합니다.

free((void*)m_pszAppName);
m_pszAppName = _tcsdup(_T("New Title"));

먼저 기존의 메모리를 해제하고 malloc을 사용하는 _tcsdup을 사용해서 새로운 문자열을 입력합니다.

위와 같은 방법은 통해서 AfxMessageBox의 타이틀을 변경할 수 있습니다.

추가로 다음과 같이 Dialog에서 임시로 변경해서 사용이 가능합니다.

LPCTSTR pAppNameTemp = AfxGetApp()->m_pszAppName;
AfxGetApp()->m_pszAppName = _T("My Temporary Title");
AfxMessageBox(_T("Test!!!"));
AfxGetApp()->m_pszAppName = pAppNameTemp;

주소를 백업한 이후에 임시로 변경한 이후에 다시 복원시키는 방법입니다.

반응형