무조건 메뉴를 비활성화시키니 너무 답답하다 - VC++ 2005에서 Export Template 메뉴

2 minute read

ACM문제 코드를 제출하기 전 예제를 몇 개 만들어서 돌리고 눈으로 검증하곤 했는데, 그렇게 하지 말고 유닛 테스트(unit test) 프레임 워크를 사용해서 알고리즘을 검증하면 되겠다 싶어서 google test를 붙였다. 이렇게 세팅하고 나니 google test 라이브러리에 종속성이 생겨서 프로젝트 세팅에서 빌드가 제대로 되도록 수정해야 했다. 것 참! 문제 풀 때마다 이거 매번 해주려니 짜증난다.

옳커니! 이럴 때 Project Template을 쓰면 딱 이겠네. google test 붙이고 틀을 잡아 놓은 프로젝트를 템플릿으로 구워 놓으면 정말 편할 것 같다. <Creating Project and Item Templates - MSDN>을 보니 자동으로 만들어 주는데, File > Export Template… 를 눌러서 마법사를 실행시키면 쿵짝쿵짝 쉽게 만들 수 있다고 한다. 뭐 이래? 이렇게 쉬워도 되는 거야?

nil

그런데 계속 이 지랄이다. 정말 답답하다. 차라리 클릭을 해서 안 되는 이유를 알려주면 좋겠다. 내가 제일 싫어하는 대화 상자(Dialog box)라도 뜨면 얼마나 좋으리~ 결국 구글링을 해보니 VS 세팅을 리셋 시키라는 말이 있어서 해보니 안 된다. 다른 원인이 있지 싶어서 MSDN을 꼼꼼히 읽어보니…

he template architecture described in this section is not supported for Visual C++ projects. For information on creating Visual C++ project templates, see Designing a Wizard

Project Template에 대한 제일 상위 도움말을 보니 이렇게 써 있었다. 제길.

왜 저 글을 템플릿 생성 도움말에 안 적었냐고 화를 내려다가 생각해보니, 저 메시지를 Project Template에 관한 모든 도움말 페이지에 적을 수도 없는 거 아닌가. 좋은 교훈을 얻은 것 같다. MSDN 도움말을 볼 때 해당 항목의 상위 도움말을 항상 볼 것.

다시 비활성화된 메뉴 이야기로 돌아가자. 이 비활성화된 Export Template 메뉴는 유저 인터페이스에 있어서 실패라고 생각한다. 일단 Visual C++ 환경에서는 이 메뉴가 비활성화되어 있는 게 아니라 아예 없어져야 한다. 이렇게 비활성화된 메뉴가 있으면 “어? Visual C++에서는 동작 안 하는 메뉴인가?”라는 생각은 들지 않고 “음.. 내가 뭘 잘못했지? 이 메뉴를 실행하는데 필요한 요구조건이 부족한가?”라고 생각하게 된다. 물론 이 상황에서 Visual C++에서는 동작하지 않는다는 생각을 못 하게 된다.

이와 관련돼서 <메뉴를 감추거나 비활성화 시키지 마세요? - art.oriented>란 글을 읽었는데, 동의하는 내용이다. 만약 Visual C++ 환경에서 저 메뉴를 삭제하는 게 힘든 일이라면 이런 메뉴는 그냥 비활성화시키지 않고 실행하도록 허용해야 한다. 그리고 “Visual C++에서는 이런 편한 짓 못합니다. C#으로 갈아타세요.“ 이런 메시지 박스를 하나 띄어주는 게 왜 안 되는지 도저히 감도 못 잡는 유저들의 수명을 늘일 수 있다.

조엘 온 소프트웨어를 쓴 조엘은 <Don’t hide or disable menu items>에서 “닥치고 다 실행 가능. 현재 상태에서 실행 불가능한 것은 이유를 알려줘라“라고 주장하고 있다. 일단 모든 이유를 다 설명해야 하기에 괴롭고 유저 편하라고 한 고생인데, 유저에게 불편함을 줄 수도 있다. 비활성화된 메뉴의 역할 중 하나가 실행하기 위해 입력하는 단계에 앞서 불가능함을 유저에게 알려주는 것이기 때문이다. 극단적이지만 50개의 메뉴 중에 단 하나만 실행 가능한 상태인데, 다른 메뉴에서 헤맬 수도 있다. 그래서 그의 주장에는 반대한다.

nil

하지만 실행이 불가능한 것을 마우스 클릭이 끝난 후에 알려줘야 할까? 내가 생각하기에 가장 좋은 해답은 실행이 불가능한 메뉴들은 비활성화된 상태로 나두고 실행이 불가능한 이유를 알려줘야 할 메뉴들은 이유를 툴 팁으로 알려주는 게 좋지 않을까 싶다. 비활성화되면 툴 팁도 비활성화 시킬 것 같은데, 추가적인 작업이나 꼼수가 필요할 것이다.