윈도 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() 함수를 사용
덧. 내 PC에선 ITaskBar.h를 조금 수정해야 컴파일이 되었다.
수정한 내용은 다음과 같다.
a. __ITaskbarList_INTERFACE_DEFINED__ → ___ITaskbarList_INTERFACE_DEFINED___
b. ITaskbarList : public IUnknown → ITaskbarList1 : public IUnknown