본문 바로가기

IT

Vista의 새로운 API : TaskDialog

Windows Vista에서 대략 7000여개에 이르는 새로운 API 함수들이 추가되었다. 그 중에 Vista의 여러 영역에서 가장 다양하게 활용되고 있는 것이 바로 TaskDialog.

기존에는 MessageBox라는 것만 제공했었는데, 이 TaskDialog는 MessageBox의 기능을 모두 포함할 뿐만 아니라, 보다 큰 글꼴로 표현되는 Main instruction과 footer text, check box, progress bar 등 매우 다양한 형태의 UI를 제공한다. (대부분 callback 함수 형태로 대화상자가 떠 있는 동안 interaction이 가능하다.) 또한 사용자가 해야 할 작업을 선택하는 버튼들의 text를 자유로이 변경할 수 있고, 새로운 버튼들을 추가하는 것도 가능하며, Command Link라는 보다 큼직하고 눈에 잘 띄는 스타일의 버튼 모양도 제공한다.

Task Dialog

Command Link를 사용한 Task Dialog 예제.

UAC의 작업 계속 여부를 묻는 대화상자나, 기본 내장 게임들에서 게임 종료시 할 동작을 물어보는 대화상자, 메모장 등에서 창을 닫을 때 저장하겠냐고 물어보는 대화상자 등 Vista의 거의 모든 대화상자가 TaskDialog를 사용하고 있다고 해도 과언이 아니다.

TaskDialog API는 두 가지 종류가 제공되는데, 하나는 기존의 MessageBox에 Main instruction과 Description을 구분해서 주고 Shield 아이콘 등을 추가로 사용할 수 있는 보다 간단한 TaskDialog 함수이고, 다른 하나는 위의 스크린샷과 같이 사용자 정의 Command Link, Footer 영역, Expanded 영역 등을 구조체로 미리 정의하여 넘길 수 있는 TaskDialogIndirect 함수이다.

위의 예제에서 사용된 코드는 C#으로 작성되었으며, 이곳에서 다운받을 수 있다. 이것을 통해 Win32 API를 C#과 같은 .NET Framework 환경에서 사용하려면 어떻게 해야 하는지도 알 수 있었다. (주의 : 위의 예제 코드는 x86 용으로 컴파일해야 제대로 동작한다. 내가 사용한 VS2005에서는 아직 x64용 .NET Framework가 제공되지 않아 컴파일은 되지만 API 호출시 오류가 발생한다.) VC++로 된 예제들은 구글링하면 보다 쉽게 찾을 수 있으니 생략한다.

Vista의 TaskDialog는 앞으로 기존의 MessageBox를 완전히 대체함은 물론 사용자들에게도 '확인', '취소', '예', '아니오'와 같은 단순한 메시지가 아닌, 정말로 자신이 하는 작업이 무엇인지 알 수 있는 추가 설명들을 통해 보다 확신에 찬 선택(?)을 할 수 있는 계기가 될 것이다. (이미 기능을 잘 아는 고급사용자는 main instruction만 보고, 그렇지 않은 사람은 세부 정보 보기를 선택해서 찬찬히 읽어볼 수도 있을 것이다) 내가 비록 PHP, Python 등의 스크립트 언어를 주로 다루고 있지만서도, 한때 Windows API에 심취했었던만큼, 상당히 반가운 기능이다.

다음 포스트에서는 Vista의 달라진 창 표현방식인 Desktop Window Manager에 대해 적어볼까 한다.