본문 바로가기

Programming/Win32&MFC&COM

MFC에서 커스텀 리소스(Custom Resource) 사용 방법

반응형

MFC를 활용해서 개발할 경우 Resource View에서 리소스를 확인할 수 있습니다.

비트맵이나 아이콘, 다이얼로그, 메뉴 등이 포함되어 있습니다.

이런 타입은 MFC 자체에서 지원하는 리소스 형식입니다.

지원하는 타입이 아닌 다른 타입의 리소스를 추가해서 사용하기 위해서는 커스텀 리소스를 사용해야 합니다.

바이너리나 텍스트 파일 등을 추가해서 가져오는 것이 가능합니다.

간단하게 텍스트 파일을 리소스에 추가하고 가져오는 방법입니다.

먼저 Resource View로 이동해서 새로운 리소스를 추가합니다.

프로젝트명.rc라고 되어 있는 부분에 마우스 오른쪽 클릭을 하면 Add resource 메뉴를 선택합니다.

리소스를 추가할 수 있는 다이얼로그가 표시됩니다.

오른쪽에 있는 Import... 버튼을 클릭합니다.

파일 선택을 할 수 있는 다이얼로그가 표시되는데 파일 타입을 All Files (*.*)로 변경합니다.

그리고 미리 생성해둔 간단한 문장이 포함된 텍스트 파일을 선택했습니다.

이제 리소스의 타입을 지정하는 다이얼로그가 표시됩니다.

TEXT라는 타입으로 이름을 정하고 OK 버튼을 클릭합니다.

다음과 같이 정상적으로 텍스트 파일이 추가된 것을 확인할 수 있습니다.

리소스 이름은 변경이 가능하기 때문에 원하는 이름으로 변경합니다.

소스 코드에서 리소스를 읽어오는 방법은 다음과 같습니다.

// Load Resource
HRSRC hRes = ::FindResource(nullptr, MAKEINTRESOURCE(IDR_TEXT1), _T("TEXT"));
if (NULL == hRes)
	return -1;

DWORD dwResourceSize = ::SizeofResource(nullptr, hRes);
if (0 == dwResourceSize)
	return -2;

LPVOID pData = ::LockResource(::LoadResource(nullptr, hRes));
if (NULL == pData)
	return -3;

// How to use
char* lpResource = new char[dwResourceSize + 1];
memcpy_s(lpResource, dwResourceSize, pData, dwResourceSize);
lpResource[dwResourceSize] = _T('\0');
MessageBoxA(nullptr, lpResource, "", MB_OK);

delete[] lpResource;

소스 코드의 How to use 전까지 호출했을 때 pData가 실제 리소스를 가리키는 포인터입니다.

다만 텍스트를 화면에 출력하기 위해서 마지막에 NULL을 추가하기 위해서 메모리를 할당해서 복사합니다.

그리고 텍스트를 출력하면 정상적으로 화면에 표시되는 것을 확인할 수 있습니다.

바이너리 파일 등을 사용할 때는 리소스에 직접 접근해서 처리해도 됩니다.

PNG 이미지 파일 형식 등도 커스텀 리소스로 사용이 가능합니다.

불러온 이후에 IStream 객체를 활용해서 GDI+로 가져오는 방법으로 처리가 가능합니다.

반응형