리소스

:: 메뉴, 다이얼로그, 비트맵, 커서, 아이콘, 엑셀레이터(단축키), 문자열

→ 리소스는 아이디(중복되지 않는 양의 정수 값)로 다룬다.

 

① 아이콘 리소스

:: 왼쪽 상단과 최소화 때 하단 제목 표시줄에 나타나는 작은 이미지

→ *.ico 파일 확장자

 

크기 : 16x16, 32x32, 48 x48, 색상비트 : 4/8/32비트

※ 기본 : 4비트(16색), 32x32

 

→ 아이콘 아이디

접두사 IDI_

 

파일 - 새로 만들기 - 파일 - 아이콘 파일 - 기본이 32x32, 4비트 아이콘이므로 이곳을 편집

- 청록색 부분은 '투명색'으로 출력에서 제외되는 색상

- 저장하면 아이콘에 대한 아이디가 다르게 설정되어 별도로 사용할 수 있다.

실제 Resource.h 파일에 가보면 다른 아이디가 설정되어 있음을 알 수 있다

 

해당 프로젝트 리소스 폴더의 아이콘 폴더에 추가

 

- 아이콘 로딩 함수는 아래와 같다.

HICON LoadIcon(
	__in HINSTANCE hInstance,
	__in LPCTSTR IpIconName
);

이때 IpIconName에는 아이콘 아이디 정수값을 문자열 형식으로 지정할 수 있는데, 여기에 사용되는 함수가 MAKEINTRESOURCE() 이다.

LPTSTR MAKEINTRESOURCE(
	WORD wInteger
);

자동 생성 코드의 아이콘 부분 수정

 

디버깅 시

- 좌측 상단에 ICON2의 내용이, 화면 표시 줄에는 ICON1의 내용이 출력됨을 확인할 수 있다.

 

 


② 커서 리소스

:: 커서 설정은 아이콘과 유사하며, 접두사는 IDC_ 이고 *.cur로 표현된다.

 

1) 커서 로딩 방법

 

※ 운영체제에서 제공하는 기본 커서 아이디

IDC_APPSTARTING, IDC_ARROW, IDC_CROSS, IDC_HAND, IDC_IBEAM, IDC_ICON, IDC_NO, IDC_SIZE, IDC_WAIT 등,,

 

- 기본 커서 로딩 함수는 아래와 같다.

HCURSOR LoadCursor(
	__in HINSTANCE hInstance,
	__in LPCTSTR IpCursorName
);

운영체제의 기본 커서 사용시 hInstance는 NULL 값, IpCursorName은 커서 기본 아이디를 넣으면 된다.

 

아이콘 설정 시 봤던 cpp 코드에서 커서 부분 코드를 수정

임의의 커서를 적용하기 위해선 인스턴스를 지정해줘야 한다.

 

편집한 후 핫 스폿 설정까지 한다.

(핫 스폿 설정이란 이 커서가 화면 내에 위치한다는 기준이 되는 지점)

 

 

이 커서는 클라이언트 영역에서만 적용된다.

 

 

2) 메세지를 통한 커서 설정 방법 --> 전체 윈도우 영역 안에서의 커서를 통제

 

- 마우스 이동 시 발생하는 메세지

WM_MOUSEMOVE, WM_SETCURSOR

HCURSOR SetCursor(
	__in HCURSOR hCursor
);

메세지를 로딩한 후 핸들을 통해 커서를 지정해준다

 

WndProc 에 위와 같은 새로운 case문을 추가

.

전체 윈도우 창에서 커서가 동작


③ 메뉴 리소스

:: 응용 프로그램의 부가적인 기능을 선택하여 실행

:: 사용자에 의해 선택되는 사용자 인터페이스

 

메뉴를 만들고 아이디도 확인할 수 있다.
Resource.h 에서 아이디 추가된 것 확인

 

프로젝트명.cpp 수정

 

생성한 메뉴 확인

그러나 이를 클릭하면 아무 일도 일어나지 않는다. 

따라서 메뉴를 실행시키려면 WndProc에 이와 관련된 메세지와 정보를 전달하는 코드가 필요하다.

 

※ 메뉴 관련 메시지

WM_COMMAND : 메뉴 선택

 

 

※ 메뉴 항목 구분

- 메뉴 아이디 

메뉴 아이디는 wParam에 LOWORD를 통해 그 값이 들어오게 된다.

LOWORD(wParam)

wParam은 unsigned int로 4 Byte 크기를 가진다.

 

 

※ 메뉴 항목 호출 확인

메뉴 항목 호출을 확인하기 위해 '메시지 박스'를 이용할 것이다.

int WINAPI MessageBox(
	_In_opt_ HWND hWnd, //핸들
	_In_opt_ LPCTSTR IpText, //출력하고자 하는 문자열
	_In_opt_ LPCTSTR IpCaption, //타이틀 바
	_In_ UINT uType //메세지 형태
);

→ uType에 해당하는 아이디

MB_OK, MB_OKCANCEL, MB_RETRYCANCEL, MB_YESNO, MB_YESNOCANCEL 등

 

WndProc에 위와 같은 case 문을 추가

 

각각의 메뉴를 누르면 메시지 박스가 뜬다.

 


④ 문자열 리소스

 

리소스 뷰의 스트링 테이블을 가서 원하는 문자열을 추가

캡션이 실제로 출력되는 내용이다.

 

※ 타이틀 명 수정해보기

코드 초반에 제목에 대한 배열이 선언되어 있음을 확인할 수 있다.

 

코드 수정

 

제목이 수정되었다

하지만 이런 과정이 굉장히 번거롭다. 

따라서 문자열은 이런 방법보단 코드에 바로 넣어주는 경우가 많다.

 


☆ 정리

- 리소스 편집기를 활용하여 리소스를 설정할 수 있다.

- 리소스 아이디는 중복되지 않게 알아서 저장된다.

- 기본 설정일 때 인스턴스는 NULL로 설정된다.

'Project > WIN32 API' 카테고리의 다른 글

그래픽 오브젝트  (0) 2021.07.12
그래픽  (0) 2021.07.08
WndProc  (0) 2021.06.26
윈도우 창 생성 과정  (0) 2021.06.25
윈도우즈 프로그래밍  (0) 2021.06.25

+ Recent posts