#12. 대화 상자 (Dialog Box)와 컨트롤 (Control)

Microsoft Windows 운영 체제에서 프로그래밍을 한다고 하면 리소스 에디터에서 대화 상자의 속성이나 컨트롤들을 배치하고 디자인하는 정도는 할 수 있어야 한다. 그와 동시에, 어떻게 연결시킬 것인지도 알아야만 한다.


대화 상자는 CDialog라는 母 클래스로부터 상속되어져 내려온다. 이것은 어떤 종류의 대화 상자이든을 불문하고 적용되는 필수 사항이다. Windows에서는 Common Dialog Box라는 템플릿과 User Defined Dialog Box 두 가지로 구분하여 대화 상자를 실행할 수 있겠다. 우선, Common Dialog Box란 말 그대로 공용되는, 공통적으로, 어떤 프로그램에서든지 사용될 수 있는 기본 대화 상자이다. 그리고 User Defined Dialog Box란 리소스 에디터를 통하여 작성된 사용자 정의된 대화 상자를 의미한다. 프로그램의 성격이나 기능에 따라서 사용자 정의될 필요가 있는 부분이기도 하다. 참고로, 공용 대화 상자의 종류는 대체로, 파일 열기, 파일 저장, 인쇄, 찾기, 바꾸기 (치환) 등이 있겠다.


컨트롤은 대화 상자에서 처리하고자 하는 기능들을 구현하기 위한 객체들의 집합으로, 대화 상자와는 반드시 붙어다녀야만 하는 필수적인 존재들이다. 컨트롤 또한 기본 컨트롤과 사용자 정의 컨트롤로 구분된다. 기본 컨트롤이란 일반적인 형태의 Push 버튼, 체크 박스, 라디오 버튼, 텍스트 박스 등이 있다. 하지만, 사용자 정의 컨트롤이라는 것은 또 무엇일까? 이것은, 기존의 컨트롤들을 표현하는 클래스를 프로그래머 나름대로 재 상속받아서 원하는 기능들을 추가하여 생성한 것으로 웬만해서는 사용되지 않는다. 또, 기본 컨트롤들의 기능이 일반적인 형태의 프로그램에서는 99%이상 수용되기 때문에 굳이 재 상속받아서 오버라이딩할 필요는 없다.


이러한 대화 상자와 컨트롤들을 묶어 놓은 것을 리소스라고 명하였는데, 리소스는 프로그램의 창에서 외관적인 부분을 다루는 것이라고 할 수 있다. 리소스의 종류는 대체로 다음과 같은 것들이 있겠다.



  • Accelators : 단축키, 가속키라고 불리우는 것으로서 해당 메뉴나 기능들을 재빨리 수행시킬 때 사용된다.
  • Dialog : 위에서 설명한 대화 상자와 컨트롤들을 배치하기 위한 폼, 즉 틀을 의미한다.
  • Icon : 프로그램의 외부 아이콘이나 내부 대화 상자에서의 아이콘등을 편집할 수 있다.
  • Menu : 프로그램의 메뉴를 편집할 수 있다. 조건부에 따른 메뉴 구성이나 팝업 메뉴를 이곳에서 편집하게 된다.
  • Toolbar : Internet Explorer Re-Bar 또는 Classic Style ToolBar등을 여기서 편집한다. Menu와 크게 연관지어서 사용된다.
  • Version : 프로그램의 버전을 명확하게 하거나 프로젝트 단위의 어플리케이션에서 버전 관리를 확연하게 하기 위하여 사용되는 리소스로, 이것을 편집하지 않는다고 하더라도 큰 문제는 되지 않겠으나 완벽한 프로그램을 완성하기 위하여 약간의 편집은 요구될 수 있다.

참고로, 위와같은 리소스를 VC++이 아닌 다른 작은 툴로도 편집할 수 있음을 알아두기 바란다. 만일 리소스를 편집하여야 하는 시점에서 소스 코드를 유실하였다고 하더라도 리소스에 한해서만 자유자재로 편집할 수 있는 어플리케이션이 두 종류가 있다.


eXeScope는 현재 7.0까지 개발되어있어서 가장 높은 안정성을 보여준다. 이것은 편집하지 못하는 리소스가 없어서 개발자들에게, 또는 프로그램 번역가들에게 굉장한 인기를 얻고 있다. 원산지는 일본이다.


Resource Hacker는 eXeScope와 대등한 격으로 버전은 낮지만 eXeScope 못지 않은 성능과 능력을 보여주고 있다. 원산지는 미국으로 추정된다.


그리고, Microsoft에서도 Microsoft Locallization Studio를 발매하였는데, 이것은 가장 많은 리소스를 편집할 수 있으나 직접 적용시킬 수 없는 것이 단점이다.


우선, 대화 상자를 리소스 에디터를 통하여 생성하고 해당 대화 상자를 클래스 위저드에서 등록시킨 다음에 사용할 부분에 대해서 아래와 같이 입력할 수 있다.



    C(대화 상자 클래스명)Dlg dlg;


    dlg.DoModal();


대화 상자에 대한 자세한 취급 방법은 교재를 참고하여 익혀두도록 한다. Windows 프로그래밍을 제대로 시작하려면 알아두어야할 필수 사항이므로 반복을 거듭해서 익혀두어야만 한다.  

댓글 남기기