서브(sub, 하위)메뉴

앞장에서 우리는 간단한 메뉴를 만드는 방법과 메뉴항목을 선택했을 때 일어나는 이벤트를 처리하는 방법에 대해서 알아보았습니다. 이번 장에서는 서브메뉴를 추가하는 방법에 대해서 알아보겠습니다. 서브메뉴는 메뉴를 만들때 사용했던 것과 같은 함수로 만듭니다. 그래서 앞장에서 보았듯이 glutCreateMenu 함수를 사용해서 메뉴를 만들듯 서브메뉴를 만듭니다. 그런 다음에 glutAddSubMenu 함수를 사용해서 메뉴에 서브메뉴 항목을 추가하는 것입니다.

void glutAddSubMenu(char *entryName, int menuIndex); 

인자설명:
entryName - 메뉴의 항목중에 서브메뉴의 이름입니다.
menuIndex - 서브메뉴의 인덱스값입니다. 이 값은 서브메뉴를 만들기 위해서 glutCreateMenu 를 호출했을 때 반환되는 값입니다.

이 함수는 메뉴의 끝에 항목을 추가합니다. 그리고 그 항목을 선택했을 때, 서브메뉴가 나타나게 됩니다. 다음에 나오는 코드는 위의 함수의 사용을 나타낸 코드입니다.

void createGLUTMenus()
{
    int menu,submenu;
    submenu = glutCreateMenu(processMenuEvents);
    glutAddMenuEntry("Red",RED);
    glutAddMenuEntry("Blue",BLUE);
    glutAddMenuEntry("Green",GREEN);

    menu = glutCreateMenu(processMenuEvents);
    glutAddMenuEntry("White",WHITE);
    glutAddSubMenu("RGB Menu",submenu);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
}

위의 코드를 실행해보면, 마우스의 오른쪽버튼을 눌렀을 때 두 개의 항목이 있는 메뉴가 나타납니다. 첫번째 항목은 "White" 고 두번째 항목은 "RGB Menu" 입니다. 여기서 "RGB Menu" 항목을 누르면 서브메뉴가 나타나게 되고 이 서브메뉴는 "Red", "Green" 그리고 "Blue" 세개의 메뉴항목을 가지고 있습니다.

이 예제에서는 메뉴와 서브메뉴의 이벤트를 처리하는 함수를 같게 설정해 놓았지만 꼭 이렇게 하지 않아도 됩니다. GLUT 는 이벤트처리부분이 각 메뉴마다 분리되어 있든지 아니면 합쳐져있든지 상관하지 않기 때문입니다. 이 프로젝트의 소스코드는 Github에 있으므로 받아서 실행해 보고 자세하게 살펴보길 바랍니다.

Last updated