본문 바로가기

개발 이야기

[윈도우7 개발 - 3] Taskbar API(Progress)

<정희재>

안녕하세요. 호랭이 동생 정희재입니다.
호랭이 블로그를 찾아주시는 개발자 분들에게 조금이나마 도움이 되고자 글을 올리기로 하였습니다.
저는 C++ 개발자로 현재 멀티미디어 플레이어 엔진을 개발하고 있습니다.
앞으로 좋은 자료들로 찾아뵙겠습니다.

 

Taskbar API (Progress)

 

지난번 Windows7 Taskbar API를 소개하면서 Windows7 Taskbar에서 새롭게 추가된 내용들을 정리하고,  VC++을 이용하여 Overlay Icon을 적용하는 방법에 대해서 다뤘었다. 이번에는 새로운 기능들 중 TaskbarProgress bar를 적용하는 방법에 대해서 알아본다.

 

Windows7 Taskbar에는 Progress를 적용할 수가 있는 것은 물론이고, 상황에 따라서 해당 프로그램 윈도우가 보이지 않는 상황에서도 좀 더 다채로운 상황을 사용자가 직시할 수 있도록 하기 위해 다음과 같이 4가지 상태 Flag를 준비해 두었다.

 

사용자 삽입 이미지


 

1.     TBPF_INDETERMINATE : 이 플래그를 설정하면 녹색이 왼쪽에서 오른쪽으로 1.5초 주기로 이동을 하는 에니메이션 효과를 보여준다. 설치, 복사 등의 준비상태에 사용하기에 적절하다.

2.     TBPF_NORMAL : 녹색으로 채우고자 할 경우에 사용한다. 플래그 이름이 NORMAL이니 정상적인 상태의 진행상황을 표시하고자 할 경우에 사용한다.

3.     TBPF_PAUSED : 노란색으로 채우고자 할 경우에 사용한다. 플래그 이름이 PAUSED로 지정되어 있으니 진행상황이 일시정지 중인 경우나 예외 상황에 적절히 사용한다.

4.     TBPF_ERROR : 빨간색으로 채우고자 할 경우에 사용한다. 오류발생시에 사용자에게 알리기 위해 사용한다.

 

 

 

SetProgressState


앞에서 설명한 4가지 상태 플래그를 적용하기 위한
ITaskbarList3의 멤버함수로 함수 원형은 다음과 같다.

 

HRESULT SetProgressState (HWND hWnd, TBPFLAG tbpFlags)

 

TBPLAGTBPF_INDETERMINATE, TBPF_NORMAL, TBPF_PAUSED, TBPF_ERROR 중 하나를 사용하여 상태를 설정할 수 있으며, Progress가 진행 중인 경우에도 사용할 수 있다.

 

 

SetProgressValue

진행상태를 설정하기 위한 ITaskbarList3 의 멤버함수로 함수 원형은 다음과 같다.

 

HRESULT SetProgressValue (HWND hWnd, ULONGLONG ullCompleted, ULONGLONG ullTotal)

 

ullCompleted 에 현재 진행 중인 숫자를 입력하고, ullTotal에 최대 숫자를 입력하면, 함수 내에서 자동으로 백분율(%)로 계산하여 진행상황을 표시 해준다.

 

 

Example

 

ITaskbarList3* ptl;//Created earlier

 

DWORD WINAPI DoWork(LPVOID) {

    ptl->SetProgressState(hmainwnd, TBPF_NORMAL);

    for (int i = 0; i < WorkToDo; ++i) {

        DoSomePartOfTheWork(i);

        ptl->SetProgressValue(hmainwnd, i, WorkToDo);

    }

    ptl->SetProgressState(hmainwnd, TBPF_PAUSED);

    return 0;

}