2011/04/06

Dialog based 프로젝트에서 Windows 7 Taskbar 아이콘에 Progress 출력하기

Dialog based 프로젝트의 경우 CFrameWnd 클래스가 없어서 적접적으로 Taskbar 관련 함수를 사용할 수 없다. 이때에는 CoCreateInstance 함수를 이용하여 Taskbar Button 객체를 가져와야 한다. 하지만 이때에 Taskbar Button 이 만들어 진 후에 작업을 해야 한다.



프로그램이 완전히 실행한 뒤에 Taskbar Button 객체를 가져와도 되지만 Taskbar Button 이 만들어진 후를 감지하여 객체를 가져오는 것이 보다 유연한 방법일 것이다. 그러기 위해서는 TaskbarButtonCreated 메시지를 받아 처리하여야 한다.



아래 코드는 메시지 등록과 이를 처리하는 과정 그리고 간단하게 Progress 를 출력하는 코드이다.

////////////////////////////////////////////////////////////////////////////////
// Header
ITaskbarList3* m_pTaskbar;

static const UINT WM_TASKBARBUTTONCREATED;
LRESULT OnTaskbarBtnCreated ( WPARAM wParam, LPARAM lParam );


////////////////////////////////////////////////////////////////////////////////
// Source
const UINT CMyTaskbarDlg::WM_TASKBARBUTTONCREATED
= RegisterWindowMessage( _T("TaskbarButtonCreated") );

BEGIN_MESSAGE_MAP(CMyTaskbarDlg, CDialogEx)
:
ON_REGISTERED_MESSAGE(WM_TASKBARBUTTONCREATED, &CMyTaskbarDlg::OnTaskbarBtnCreated)
:
END_MESSAGE_MAP()

LRESULT CMyTaskbarDlg::OnTaskbarBtnCreated ( WPARAM wParam, LPARAM lParam )
{
if ( CoCreateInstance(
CLSID_TaskbarList,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&m_pTaskbar) ) != S_OK )
{
m_pTaskbar = NULL;
}

return 0;
}

void CMyTaskbarDlg::OnBnClickedBtnProgressDisplay()
{
if ( m_pTaskbar != NULL )
{
switch ( m_cmbProgressType.GetCurSel() )
{
case 1:
m_pTaskbar->SetProgressState( m_hWnd, TBPFLAG::TBPF_INDETERMINATE );
TRACE("Display Progress TBPFLAG::TBPF_INDETERMINATE \n");
break;

case 2:
m_pTaskbar->SetProgressState( m_hWnd, TBPFLAG::TBPF_NORMAL );
m_pTaskbar->SetProgressValue( m_hWnd, 72, 100 );
TRACE("Display Progress TBPFLAG::TBPF_NORMAL \n");
break;

case 3:
m_pTaskbar->SetProgressState( m_hWnd, TBPFLAG::TBPF_ERROR );
m_pTaskbar->SetProgressValue( m_hWnd, 72, 100 );
TRACE("Display Progress TBPFLAG::TBPF_ERROR \n");
break;

case 4:
m_pTaskbar->SetProgressState( m_hWnd, TBPFLAG::TBPF_PAUSED );
m_pTaskbar->SetProgressValue( m_hWnd, 72, 100 );
TRACE("Display Progress TBPFLAG::TBPF_PAUSED \n");
break;

default:
m_pTaskbar->SetProgressState( m_hWnd, TBPFLAG::TBPF_NOPROGRESS );
TRACE("Display Progress TBPFLAG::TBPF_NOPROGRESS \n");
break;
}
}
}




2011/04/06 - [Dev Story/Tips] - Windows 7 Taskbar 아이콘에 Progress Bar 출력하기


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

No comments :

Post a Comment