2011/04/06

Windows 7 Taskbar 아이콘에 Progress Bar 출력하기

Windows 7 의 테스트바 아이콘은 많은 기능을 갖고 있다. 그 중 하나인 진행 상태를 표시해 보았다.

Visual Studio 2010 버전을 사용할 경우 이는 대단히 간단한 것이다. 



CFrameWnd 의 멤버 변수인 아래 세 개의  함수로 구현할 수 있다.


  • SetProgressBarState

  • SetProgressBarRange

  • SetProgressBarPosition




SetProgressBarState





void SetProgressBarState(


   TBPFLAG tbpFlags


);



Progress 의 상태를 설정하는 함수로 인자 아래와 같은 인자를 넘겨줄 수 있다.

TBPF_NOPROGRESS, TBPF_INDETERMINATE, TBPF_NORMAL, TBPF_ERROR, TBPF_PAUSED.



TBPF_NOPROGRESS - Progress 사용하지 않는 상태





TBPF_INDETERMINATE - 끝이 정해지지 않은 상태





TBPF_NORMAL - 기본 상태





TBPF_ERROR - 에러가 발생한 상태로 아래와 같이 붉은색으로 표시 된다.





TBPF_PAUSED - 진행이 멈춘 상태로 아래와 같이 노란색으로 표시 된다.









SetProgressBarRange 




void SetProgressBarRange(


   int nRangeMin,


   int nRangeMax


);



Progress 표시 범위 설정하는 함수로 최소값과 최대값을 전달하여 설정할 수 있다. 







SetProgressBarPosition




void SetProgressBarPosition(


   int nProgressPos

); 



Progress 의 현재 값을 설정하는 함수.

 

이 함수 사용에 주의할 점은 SetProgressBarState 에서 TBPF_NOPROGRESS, TBPF_INDETERMINATE 에서 설정을하고 SetProgressBarPosition 함수가 수행이 되면 Progress Bar 는 TBPF_NORMAL 상태로 출력하게 된다.



아래 코드는 간단한 사용 예로 실제 진행에 대하 것은 빠진 상태이다.

m_pFrame = (CMainFrame*)GetParentFrame();


switch ( m_cmbProgressType.GetCurSel() )
{
case 1: // TBPFLAG::TBPF_INDETERMINATE
m_pFrame->SetProgressBarState( TBPFLAG::TBPF_INDETERMINATE );
TRACE("Display Progress TBPFLAG::TBPF_INDETERMINATE \n");
break;

case 2: // TBPFLAG::TBPF_NORMAL
m_pFrame->SetProgressBarState( TBPFLAG::TBPF_NORMAL );
m_pFrame->SetProgressBarRange( 0, 100 );
m_pFrame->SetProgressBarPosition( 72 );
TRACE("Display Progress TBPFLAG::TBPF_NORMAL \n");
break;

case 3: // TBPFLAG::TBPF_ERROR
m_pFrame->SetProgressBarState( TBPFLAG::TBPF_ERROR );
m_pFrame->SetProgressBarRange( 0, 100 );
m_pFrame->SetProgressBarPosition( 72 );
TRACE("Display Progress TBPFLAG::TBPF_ERROR \n");
break;

case 4: // TBPFLAG::TBPF_PAUSED
m_pFrame->SetProgressBarState( TBPFLAG::TBPF_PAUSED );
m_pFrame->SetProgressBarRange( 0, 100 );
m_pFrame->SetProgressBarPosition( 72 );
TRACE("Display Progress TBPFLAG::TBPF_PAUSED \n");
break;

default: // TBPFLAG::TBPF_NOPROGRESS
m_pFrame->SetProgressBarState( TBPFLAG::TBPF_NOPROGRESS );
TRACE("Display Progress TBPFLAG::TBPF_NOPROGRESS \n");
break;
}

<

Original Post : http://neodreamer-dev.tistory.com/529

No comments :

Post a Comment