본문 바로가기
개발/Windows

리소스 문자열을 CString으로 불러오는 법 (win32,mfc)

by lucidmaj7 2022. 3. 2.
728x90
반응형

보통 MFC, Win32 애플리케이션을 개발할 때 리소스파일에 문자열을 정의하여 불러 쓴다. 이렇게 하는 이유는 코드와 리소스가 분리되어 유지보수의 편리함이 생기고, 다국어지원등에 유리할 수 있기 때문이다. 

이번 포스트에서는 MFC에서 리소스에 정의된 문자열을 CString으로 불러오는 법을 알아 보겠다.

 

1. LoadString

일반적으로 CString에서 리소스파일의 문자열을 불러오려면 LoadString 멤버함수를 이용한다. 

**`CStringT`** Class | Microsoft Docs

 

**`CStringT`** Class

API reference for the Microsoft ATL **`CStringT`** class

docs.microsoft.com

예제 코드는 다음과 같다

	CString strMsg;
	strMsg.LoadString(IDS_STRING_MSG);
	
	AfxMessageBox(strMsg);

 

2. CString 생성자를 이용

두번째 방법으로 CString의 생성자를 이용하는 방법이다. 

CString의 생성자에는 보통 문자열의 포인터를 파라미터로 호출한다. 하지만 여기에 리소스 ID를 넣어 호출 할 수도 있다.

문자열 포인터를 파라미터로한 CString 생성자 안에서는 CheckImplicitLoad라는 함수를 호출하고 있다.

CheckImplicitLoad함수를 더 자세히 보면 전달받은 포인터를 IS_INRESOURCE라는 매크로로 확인한 후 LoadString을 호출한다. 

IS_INTRESOURCE는 상위 16비트가 0인지 확인한다. 즉 정수인지 확인한다.

#define IS_INTRESOURCE(_r) ((((ULONG_PTR)(_r)) >> 16) == 0)

문자열 생성자에 문자열 포인터와 정수를 둘다 받을 수 있는게 좀 이상하긴 하지만.. 내부적으로 그렇게 처리가 되고 있다.

예제는 다음과 같다.

	CString strMsg((LPCSTR)IDS_STRING_MSG);
	AfxMessageBox(strMsg);

728x90
반응형

댓글