728x90
반응형
보통 MFC, Win32 애플리케이션을 개발할 때 리소스파일에 문자열을 정의하여 불러 쓴다. 이렇게 하는 이유는 코드와 리소스가 분리되어 유지보수의 편리함이 생기고, 다국어지원등에 유리할 수 있기 때문이다.
이번 포스트에서는 MFC에서 리소스에 정의된 문자열을 CString으로 불러오는 법을 알아 보겠다.
1. LoadString
일반적으로 CString에서 리소스파일의 문자열을 불러오려면 LoadString 멤버함수를 이용한다.
**`CStringT`** Class | Microsoft Docs
예제 코드는 다음과 같다
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
반응형
'개발 > Windows' 카테고리의 다른 글
[Win32] 윈도우의 닫기 버튼을 눌렀을 때 일어 나는 일 (WM_CLOSE) (1) | 2022.07.31 |
---|---|
HIWORD, LOWORD 매크로, DWORD 쪼개기 (0) | 2022.06.16 |
OpenJDK 다운로드 , 마이크로소프트에서 받자. (0) | 2022.02.25 |
[Win32] WM_ERASEBKGND에서 리턴 값의 의미? (0) | 2022.02.24 |
C++/WinRT의 필요성 - 노트북 배터리 정보 구하기 (0) | 2021.11.18 |
댓글