반응형

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

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

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



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


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

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


적용 방법은 이렇다.


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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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


반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band