. 리소스

앞에서도 말했듯이 Dangeun 프로젝트는 앞으로 사용하게 될 모든 리소스를 이미 포함하고 있다. 어떤 리소스들이 작성되어 있는지 미리 구경해보자. 이 리소스를 보면 앞으로 어떤 기능이 더 추가될 것인지를 미리 볼 수 있다.

ApiEdit8에서 만든 커서도 당연히 포함되어 있다. 비트맵이나 아이콘 등 외부 파일로 저장되는 리소스들은 모두 프로젝트 폴더 아래의 res 서브폴더안에 넣어 두었다. 소스와 리소스가 같은 폴더에 섞여 있으면 관리하기에도 좋지 않고 보기에도 좋지 않다.

당근은 실제 사용을 목적으로 하는 프로그램이므로 자신의 얼굴인 아이콘을 가져야 한다. Win32 프로그램은 두 가지 크기의 아이콘을 제공해야 하며 당근도 그렇게 하고 있다. 좀 솜씨를 발휘해 보려고 했는데 워낙 그림 실력이 형편없어 모양이 별로 좋지는 않다. 그려 놓고 보니 당근같아 보이기도 하고 고추같아 보이기도 하는데 그냥 당근을 그려 놓은 것이라고 생각하기 바란다. 디자인을 좀 할 수 있는 사람은 예쁘게 그려 보되 이왕 그렸으면 나한테도 보내주면 고맙겠다.

    

이 아이콘은 메인 프로그램의 아이콘으로 사용되며 IDI_DANGEUN이라는 ID를 가진다. 이 아이콘 외에 문서를 나타내는 아이콘도 필요하며 역시 32*32 크기와 16*16 크기를 동시에 만들었다. 문서안에 당근이 있는 모양을 그렸는데 역시 별로 마음에 들지는 않는다.

메뉴는 두 벌 정의되어 있다. MDI는 문서가 열려 있을 때와 그렇지 않을 때 각각 다른 메뉴를 쓰는 것이 보통이므로 두벌의 메뉴가 필요하다. 다음은 문서가 열려 있을 때 사용될 IDR_MENU1이다.

메뉴가 원래 프로그램의 모든 기능을 총괄적으로 표현하는 리소스이므로 메뉴 내용을 보면 Dangeun의 스팩을 한 눈에 살펴볼 수 있다. 보다시피 일반적인 편집기가 가져야 할 기능들이 메뉴에 포함되어 있다. 다음은 문서가 열려 있지 않을 때 사용되는 IDR_MENU2 메뉴이다.

IDR_MENU1의 항목 중 일부만 가지고 있는 아주 간단한 메뉴이다. 이 메뉴의 사용 예는 잠시 후 코드에서 보게 된다. 이외에 화면의 각 부분에서 사용할 팝업메뉴가 정의되어 있다. 비트맵이나 커서, 액셀러레이터도 미리 구경이나 해보도록 하자. 대화상자도 열어 보면 앞으로 작성할 기능들을 미리 살펴볼 수 있다.

당근의 리소스 전체를 보고 싶으면 메모장으로 Dangeun.rc 파일의 전체 리스트를 한 번 읽어보도록 하자. 리소스 스크립트를 한 번 읽어 보는 것은 의미가 있다. 왜냐하면 그림만 봐서는 메뉴항목이나 컨트롤의 ID, 스타일 등을 알 수 없으며 대화상자 같은 복잡한 리소스는 스크립트를 통해서만 탭 순서나 정확한 컨트롤의 위치 등을 알 수 있기 때문이다. 컨트롤의 ID 등은 이 스크립트를 통해 살펴 보도록 하자.

resource.h에 정의되어 있는 IDM_WINDOWCHILD에 대해서는 부연 설명이 필요하다. 열린 차일드의 목록은 MDIClient 윈도우가 자동으로 관리하되 응용 프로그램은 차일드 창을 메뉴에 표시할 수 있는 ID를 제공해야 할 의무가 있다. 이 값이 바로 그런 용도로 사용되며 실제값은 41000으로 정의하였다. 이 항목 이후 최소한 10개 이상의 ID가 비어 있어야 하므로 충분히 큰 값을 주어 이후 만들어질 메뉴항목과 충돌되지 않도록 해야 한다.