윈도 7은 XP에 비해 UI 면에서 많은 변화가 있었다.

그 중에 가장 내 눈에 띈 건 태스크바에서 프로그레스를 표시할 수 있다는 점이었다.

이 기능 덕분에 백그라운드로 어플을 실행할 때도 진행상황을 알 수 있는 등 많은 장점이 있다.



이걸 사용하려면 Visual Studio 2008 이상에서 Windows 7 SDK를 설치하면 된다. (Code Project 참고)


그런데… 이 기능을 Visual Studio 6.0에서 사용할 수 있는지 궁금해졌다.

그래서… 구글링을 해보니, 듕귁에 거주하시는 三毛라는 귀인께서 솔루션을 공개해 놓으셨다. (관련 포스트)


적용 방법은 이렇다.


1. 그 포스트 하단에 링크를 걸어둔 Win7Taskbar.rar을 다운받음

2. 압축을 푼 뒤 ITaskBar.h 를 프로젝트 폴더로 옮긴 뒤 프로젝트에 삽입

3. 아래 코드를 적절한 위치에 삽입

void CVideoConverterforiPhoneDlg::setTBProgressPos(ULONGLONG progress, ULONGLONG max) {

ITaskbarList3 *pitl;

if (SUCCEEDED(CoInitialize(NULL))) {

HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pitl));

if (SUCCEEDED(hr)) {

hr = pitl->HrInit();   

if (FAILED(hr)){   

pitl->Release();   

return;

}

pitl->SetProgressValue(m_hWnd, progress, max);

}

CoUninitialize();

}

}


void CVideoConverterforiPhoneDlg::setTBProgressState(TBPFLAG tbpFlags) {

ITaskbarList3 *pitl;

if (SUCCEEDED(CoInitialize(NULL))) {

HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pitl));

if (SUCCEEDED(hr)) {

hr = pitl->HrInit();   

if (FAILED(hr)){   

pitl->Release();   

return;

}

pitl->SetProgressState(m_hWnd, tbpFlags);

}

CoUninitialize();

}

}

물론, 위 코드에서 CVideoConverterforiPhoneDlg는 적절한 이름으로 수정해야 된다.

사용방법은 간단하다.

1. 진행률을 표시할 때는 setTBProgressPos() 함수를 사용
2. 진행상황을 표시할 때는 setTBProgressState() 함수를 사용

이 함수들의 기능 및 인자의 내용은 Code Project 를 참고하면 된다.


덧. 내 PC에선 ITaskBar.h를 조금 수정해야 컴파일이 되었다.
수정한 내용은 다음과 같다.
a. __ITaskbarList_INTERFACE_DEFINED__ ___ITaskbarList_INTERFACE_DEFINED___
b. ITaskbarList : public IUnknown → ITaskbarList1 : public IUnknown


+ Recent posts