Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> OS >> Windows®Vista™ >> Windows Vista以降独自の進捗を表示するには(ITaskbarList3)

Windows Vista以降独自の進捗を表示するには(ITaskbarList3)

  Windows Vistaから、プログレスバーが進むときに、タスクバーでも進捗が表示されているアプリケーションを見ることがあると思います。

  ITaskbarList3インターフェースを利用することにより実装できます。
  下のFigure 1〜4のように複数の形態があります。

す。Visual Studio 2010のヘッダファイルから移植して、ビルドできるようにした「custom_ShObjIdl.h」を下記に公開しています。

通常の進捗
Figure 1. 通常の進捗(TBPF_NORMAL)

進捗の一時停止中
Figure 2. 進捗の一時停止中(TBPF_PAUSED)

進捗エラー
Figure 3. 進捗エラー(TBPF_ERROR)

進捗量不明進捗量不明
Figure 4. 進捗量不明(TBPF_INDETERMINATE)

  実装の注意点としては、Visual Studio 2008までは、 ITaskbarList3用のヘッダファイル「ShObjIdl.h」が存在していないため、独自に定義する必要があることです。そのため、Visual Studio 2010から、Visual Studio 2008用にヘッダファイルを移植してみました。「custom_ShObjIdl.h」を下記に公開しています。

  下記ソースコードは、主要ファイルのみを抜き出しています。MFCを利用したVisual C++ 2008用のものです。CTaskbarList3クラスで主要機能を実装しましたので、「TaskbarList3.h」「TaskbarList3.cpp」を見ていただくとご理解いただけると思います。「taskbarlistDlg.cpp」は、CTaskbarList3を利用したダイアログです。

■■■ taskbarlist プロジェクト
custom_ShObjIdl.h

#ifndef _H_YUSU_CUSTOM_SHOBJIDL
#define _H_YUSU_CUSTOM_SHOBJIDL

#include <ShObjIdl.h>
#include <windows.h>




typedef /* [v1_enum] */ 
enum THUMBBUTTONFLAGS
    {	THBF_ENABLED	= 0,
	THBF_DISABLED	= 0x1,
	THBF_DISMISSONCLICK	= 0x2,
	THBF_NOBACKGROUND	= 0x4,
	THBF_HIDDEN	= 0x8,
	THBF_NONINTERACTIVE	= 0x10
    } 	THUMBBUTTONFLAGS;

//DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)
typedef /* [v1_enum] */ 
enum THUMBBUTTONMASK
    {	THB_BITMAP	= 0x1,
	THB_ICON	= 0x2,
	THB_TOOLTIP	= 0x4,
	THB_FLAGS	= 0x8
    } 	THUMBBUTTONMASK;

//DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)
#include <pshpack8.h>
typedef struct THUMBBUTTON
    {
    THUMBBUTTONMASK dwMask;
    UINT iId;
    UINT iBitmap;
    HICON hIcon;
    WCHAR szTip[ 260 ];
    THUMBBUTTONFLAGS dwFlags;
    } 	THUMBBUTTON;

typedef struct THUMBBUTTON *LPTHUMBBUTTON;

#include <poppack.h>
#define THBN_CLICKED        0x1800






#ifndef __ITaskbarList3_FWD_DEFINED__
#define __ITaskbarList3_FWD_DEFINED__
typedef interface ITaskbarList3 ITaskbarList3;
#endif 	/* __ITaskbarList3_FWD_DEFINED__ */

#ifndef __ITaskbarList3_INTERFACE_DEFINED__
#define __ITaskbarList3_INTERFACE_DEFINED__

/* interface ITaskbarList3 */
/* [object][uuid] */ 

typedef /* [v1_enum] */ 
enum TBPFLAG
    {	TBPF_NOPROGRESS	= 0,
	TBPF_INDETERMINATE	= 0x1,
	TBPF_NORMAL	= 0x2,
	TBPF_ERROR	= 0x4,
	TBPF_PAUSED	= 0x8
    } 	TBPFLAG;

//DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)

EXTERN_C const IID IID_ITaskbarList3;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE(\"ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf\")
    ITaskbarList3 : public ITaskbarList2
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetProgressValue( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ ULONGLONG ullCompleted,
            /* [in] */ ULONGLONG ullTotal) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetProgressState( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ TBPFLAG tbpFlags) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RegisterTab( 
            /* [in] */ __RPC__in HWND hwndTab,
            /* [in] */ __RPC__in HWND hwndMDI) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE UnregisterTab( 
            /* [in] */ __RPC__in HWND hwndTab) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetTabOrder( 
            /* [in] */ __RPC__in HWND hwndTab,
            /* [in] */ __RPC__in HWND hwndInsertBefore) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetTabActive( 
            /* [in] */ __RPC__in HWND hwndTab,
            /* [in] */ __RPC__in HWND hwndMDI,
            /* [in] */ DWORD dwReserved) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ThumbBarAddButtons( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ UINT cButtons,
            /* [size_is][in] */ __RPC__in_ecount_full(cButtons) LPTHUMBBUTTON pButton) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ThumbBarUpdateButtons( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ UINT cButtons,
            /* [size_is][in] */ __RPC__in_ecount_full(cButtons) LPTHUMBBUTTON pButton) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ThumbBarSetImageList( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ __RPC__in_opt HIMAGELIST himl) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetOverlayIcon( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ __RPC__in HICON hIcon,
            /* [string][unique][in] */ __RPC__in_opt_string LPCWSTR pszDescription) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetThumbnailTooltip( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [string][unique][in] */ __RPC__in_opt_string LPCWSTR pszTip) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetThumbnailClip( 
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ __RPC__in RECT *prcClip) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct ITaskbarList3Vtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [annotation][iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            __RPC__in ITaskbarList3 * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            __RPC__in ITaskbarList3 * This);
        
        HRESULT ( STDMETHODCALLTYPE *HrInit )( 
            __RPC__in ITaskbarList3 * This);
        
        HRESULT ( STDMETHODCALLTYPE *AddTab )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *DeleteTab )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *ActivateTab )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *SetActiveAlt )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *MarkFullscreenWindow )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ BOOL fFullscreen);
        
        HRESULT ( STDMETHODCALLTYPE *SetProgressValue )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ ULONGLONG ullCompleted,
            /* [in] */ ULONGLONG ullTotal);
        
        HRESULT ( STDMETHODCALLTYPE *SetProgressState )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ TBPFLAG tbpFlags);
        
        HRESULT ( STDMETHODCALLTYPE *RegisterTab )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwndTab,
            /* [in] */ __RPC__in HWND hwndMDI);
        
        HRESULT ( STDMETHODCALLTYPE *UnregisterTab )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwndTab);
        
        HRESULT ( STDMETHODCALLTYPE *SetTabOrder )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwndTab,
            /* [in] */ __RPC__in HWND hwndInsertBefore);
        
        HRESULT ( STDMETHODCALLTYPE *SetTabActive )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwndTab,
            /* [in] */ __RPC__in HWND hwndMDI,
            /* [in] */ DWORD dwReserved);
        
        HRESULT ( STDMETHODCALLTYPE *ThumbBarAddButtons )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ UINT cButtons,
            /* [size_is][in] */ __RPC__in_ecount_full(cButtons) LPTHUMBBUTTON pButton);
        
        HRESULT ( STDMETHODCALLTYPE *ThumbBarUpdateButtons )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ UINT cButtons,
            /* [size_is][in] */ __RPC__in_ecount_full(cButtons) LPTHUMBBUTTON pButton);
        
        HRESULT ( STDMETHODCALLTYPE *ThumbBarSetImageList )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ __RPC__in_opt HIMAGELIST himl);
        
        HRESULT ( STDMETHODCALLTYPE *SetOverlayIcon )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ __RPC__in HICON hIcon,
            /* [string][unique][in] */ __RPC__in_opt_string LPCWSTR pszDescription);
        
        HRESULT ( STDMETHODCALLTYPE *SetThumbnailTooltip )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [string][unique][in] */ __RPC__in_opt_string LPCWSTR pszTip);
        
        HRESULT ( STDMETHODCALLTYPE *SetThumbnailClip )( 
            __RPC__in ITaskbarList3 * This,
            /* [in] */ __RPC__in HWND hwnd,
            /* [in] */ __RPC__in RECT *prcClip);
        
        END_INTERFACE
    } ITaskbarList3Vtbl;

    interface ITaskbarList3
    {
        CONST_VTBL struct ITaskbarList3Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ITaskbarList3_QueryInterface(This,riid,ppvObject)	\\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ITaskbarList3_AddRef(This)	\\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ITaskbarList3_Release(This)	\\
    ( (This)->lpVtbl -> Release(This) ) 


#define ITaskbarList3_HrInit(This)	\\
    ( (This)->lpVtbl -> HrInit(This) ) 

#define ITaskbarList3_AddTab(This,hwnd)	\\
    ( (This)->lpVtbl -> AddTab(This,hwnd) ) 

#define ITaskbarList3_DeleteTab(This,hwnd)	\\
    ( (This)->lpVtbl -> DeleteTab(This,hwnd) ) 

#define ITaskbarList3_ActivateTab(This,hwnd)	\\
    ( (This)->lpVtbl -> ActivateTab(This,hwnd) ) 

#define ITaskbarList3_SetActiveAlt(This,hwnd)	\\
    ( (This)->lpVtbl -> SetActiveAlt(This,hwnd) ) 


#define ITaskbarList3_MarkFullscreenWindow(This,hwnd,fFullscreen)	\\
    ( (This)->lpVtbl -> MarkFullscreenWindow(This,hwnd,fFullscreen) ) 


#define ITaskbarList3_SetProgressValue(This,hwnd,ullCompleted,ullTotal)	\\
    ( (This)->lpVtbl -> SetProgressValue(This,hwnd,ullCompleted,ullTotal) ) 

#define ITaskbarList3_SetProgressState(This,hwnd,tbpFlags)	\\
    ( (This)->lpVtbl -> SetProgressState(This,hwnd,tbpFlags) ) 

#define ITaskbarList3_RegisterTab(This,hwndTab,hwndMDI)	\\
    ( (This)->lpVtbl -> RegisterTab(This,hwndTab,hwndMDI) ) 

#define ITaskbarList3_UnregisterTab(This,hwndTab)	\\
    ( (This)->lpVtbl -> UnregisterTab(This,hwndTab) ) 

#define ITaskbarList3_SetTabOrder(This,hwndTab,hwndInsertBefore)	\\
    ( (This)->lpVtbl -> SetTabOrder(This,hwndTab,hwndInsertBefore) ) 

#define ITaskbarList3_SetTabActive(This,hwndTab,hwndMDI,dwReserved)	\\
    ( (This)->lpVtbl -> SetTabActive(This,hwndTab,hwndMDI,dwReserved) ) 

#define ITaskbarList3_ThumbBarAddButtons(This,hwnd,cButtons,pButton)	\\
    ( (This)->lpVtbl -> ThumbBarAddButtons(This,hwnd,cButtons,pButton) ) 

#define ITaskbarList3_ThumbBarUpdateButtons(This,hwnd,cButtons,pButton)	\\
    ( (This)->lpVtbl -> ThumbBarUpdateButtons(This,hwnd,cButtons,pButton) ) 

#define ITaskbarList3_ThumbBarSetImageList(This,hwnd,himl)	\\
    ( (This)->lpVtbl -> ThumbBarSetImageList(This,hwnd,himl) ) 

#define ITaskbarList3_SetOverlayIcon(This,hwnd,hIcon,pszDescription)	\\
    ( (This)->lpVtbl -> SetOverlayIcon(This,hwnd,hIcon,pszDescription) ) 

#define ITaskbarList3_SetThumbnailTooltip(This,hwnd,pszTip)	\\
    ( (This)->lpVtbl -> SetThumbnailTooltip(This,hwnd,pszTip) ) 

#define ITaskbarList3_SetThumbnailClip(This,hwnd,prcClip)	\\
    ( (This)->lpVtbl -> SetThumbnailClip(This,hwnd,prcClip) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ITaskbarList3_INTERFACE_DEFINED__ */

#endif
■ TaskbarList3.h
  • #pragma once
  • //---------------------------------------------------------------------------------------------------------
  • // タスクバーアイコンに進捗を表示する class
  • //---------------------------------------------------------------------------------------------------------
  • #ifndef _H_YUSU_TASKBARLIST3
  • #define _H_YUSU_TASKBARLIST3
  • // Visual Studio 2008に対応させるため、
  • // Visual Studio 2010の"ShObjIdl.h" ヘッダーをもとに、独自でカスタム作成
  • #include "custom_ShObjIdl.h"
  • class CTaskbarList3
  • {
  • protected:
  •     // ITaskbarList3 のスマートポインタ管理
  •     ATL::CComPtr < ITaskbarList3 > m_pTaskbarList3;
  •     // ウィンドウハンドル
  •     HWND m_hWnd;
  •     // コピーコンストラクタ 禁止
  •     CTaskbarList3 ( const CTaskbarList3 &obj );
  • public:
  • //---------------------------------------------------------------------------------------------------------
  • // コンストラクタ & デストラクタ
  • //---------------------------------------------------------------------------------------------------------
  •     // コンストラクタ
  •     CTaskbarList3 ();
  •     // デストラクタ
  •     virtual ~CTaskbarList3 ();
  • //---------------------------------------------------------------------------------------------------------
  • // 初期化 & 解放
  • //---------------------------------------------------------------------------------------------------------
  •     // 初期化
  •     // hWnd : ウィンドウハンドルを指定
  •     BOOL Initialize ( HWND hWnd );
  •     // 解放
  •     void Uninitialize ();
  • //---------------------------------------------------------------------------------------------------------
  • // 進捗 変更
  • //---------------------------------------------------------------------------------------------------------
  •     // 進捗度合い変更
  •     // ul64Pos : 現在の進捗の位置
  •     // ul64Max : 進捗の最大値
  •     // tbpFlag : 進捗の色
  •     // TBPF_NORMAL    : 通常の進捗    (緑)
  •     // TBPF_PAUSED    : 一時停止        (黄色)
  •     // TBPF_ERROR    : エラーで停止    (赤)
  •     BOOL SetProgress ( ULONGLONG ul64Pos, ULONGLONG ul64Max, TBPFLAG tbpFlag );
  •     // 進捗停止 (進捗を表示しないで通常の状態にする)
  •     BOOL SetNoProgress ();
  •     // 進捗度合い不明でも、進捗中なことを表示 (いつ終わるかわからない処理のときに利用)
  •     BOOL SetProgressIndeterminate ();
  • };
  • #endif
■ TaskbarList3.cpp
  • #include "StdAfx.h"
  • #include "TaskbarList3.h"
  • //---------------------------------------------------------------------------------------------------------
  • // protected メンバ
  • //---------------------------------------------------------------------------------------------------------
  • // コピーコンストラクタ 禁止
  • CTaskbarList3::CTaskbarList3 ( const CTaskbarList3 &obj )
  • {
  • }
  • //---------------------------------------------------------------------------------------------------------
  • // public メンバ
  • //---------------------------------------------------------------------------------------------------------
  • //---------------------------------------------------------------------------------------------------------
  • // コンストラクタ & デストラクタ
  • //---------------------------------------------------------------------------------------------------------
  • // コンストラクタ
  • CTaskbarList3::CTaskbarList3 ()
  • {
  •     m_pTaskbarList3 = NULL;
  •     m_hWnd = NULL;
  • }
  • // デストラクタ
  • CTaskbarList3::~CTaskbarList3 ()
  • {
  •     // 明示的に解放 (スマートポインタなのでいらないですが…)
  •     Uninitialize ();
  • }
  • //---------------------------------------------------------------------------------------------------------
  • // 初期化 & 解放
  • //---------------------------------------------------------------------------------------------------------
  • // 初期化
  • BOOL CTaskbarList3::Initialize ( HWND hWnd )
  • {
  •     // ウィンドウハンドルを保持
  •     m_hWnd = hWnd;
  •     // すでに作成済みなら成功
  •     if ( NULL != m_pTaskbarList3 )
  •     {
  •         return TRUE;
  •     }
  •     // オブジェクトの作成
  •     try
  •     {
  •         if ( FAILED ( m_pTaskbarList3.CoCreateInstance ( CLSID_TaskbarList ) ) )
  •         {
  •             return FALSE;
  •         }
  •     }
  •     catch ( COleException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( COleDispatchException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( ... )
  •     {
  •         return FALSE;
  •     }
  •     return TRUE;
  • }
  • // 解放
  • void CTaskbarList3::Uninitialize ()
  • {
  •     if ( NULL != m_pTaskbarList3 )
  •     {
  •         SetNoProgress ();
  •         m_pTaskbarList3.Release ();
  •         m_pTaskbarList3 = NULL;
  •     }
  • }
  • //---------------------------------------------------------------------------------------------------------
  • // 進捗 変更
  • //---------------------------------------------------------------------------------------------------------
  • // 進捗度合い変更
  • // ul64Pos : 現在の進捗の位置
  • // ul64Max : 進捗の最大値
  • // tbpFlag : 進捗の色
  • // TBPF_NORMAL    : 通常の進捗    (緑)
  • // TBPF_PAUSED    : 一時停止        (黄色)
  • // TBPF_ERROR    : エラーで停止    (赤)
  • BOOL CTaskbarList3::SetProgress ( ULONGLONG ul64Pos, ULONGLONG ul64Max, TBPFLAG tbpFlag )
  • {
  •     HRESULT hResult;
  •     try
  •     {
  •         // 進捗位置変更
  •         hResult = m_pTaskbarList3->SetProgressValue ( m_hWnd, ul64Pos, ul64Max );
  •         if ( FAILED ( hResult ) )
  •         {
  •             return FALSE;
  •         }
  •         // 進捗色変更
  •         hResult = m_pTaskbarList3->SetProgressState ( m_hWnd, tbpFlag );
  •         if ( FAILED ( hResult ) )
  •         {
  •             return FALSE;
  •         }
  •     }
  •     catch ( COleException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( COleDispatchException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( ... )
  •     {
  •         return FALSE;
  •     }
  •     return TRUE;
  • }
  • // 進捗停止 (進捗を表示しないで通常の状態にする)
  • BOOL CTaskbarList3::SetNoProgress ()
  • {
  •     HRESULT hResult;
  •     try
  •     {
  •         // 進捗なしに変更
  •         hResult = m_pTaskbarList3->SetProgressState ( m_hWnd, TBPF_NOPROGRESS );
  •         if ( FAILED ( hResult ) )
  •         {
  •             return FALSE;
  •         }
  •     }
  •     catch ( COleException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( COleDispatchException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( ... )
  •     {
  •         return FALSE;
  •     }
  •     
  •     return TRUE;
  • }
  • // 進捗度合い不明でも、進捗中なことを表示 (いつ終わるかわからない処理のときに利用)
  • BOOL CTaskbarList3::SetProgressIndeterminate ()
  • {
  •     HRESULT hResult;
  •     try
  •     {
  •         // 進捗なしに変更
  •         hResult = m_pTaskbarList3->SetProgressState ( m_hWnd, TBPF_INDETERMINATE );
  •         if ( FAILED ( hResult ) )
  •         {
  •             return FALSE;
  •         }
  •     }
  •     catch ( COleException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( COleDispatchException *e )
  •     {
  •         e->Delete ();
  •         return FALSE;
  •     }
  •     catch ( ... )
  •     {
  •         return FALSE;
  •     }
  •     
  •     return TRUE;
  • }
■ taskbarlistDlg.cpp
  • // taskbarlistDlg.cpp : 実装ファイル
  • //
  • #include "stdafx.h"
  • #include "taskbarlist.h"
  • #include "taskbarlistDlg.h"
  • #include <objbase.h>
  • #include "custom_ShObjIdl.h"
  • #include "Resource.h"
  • #ifdef _DEBUG
  • #define new DEBUG_NEW
  • #endif
  • // CtaskbarlistDlg ダイアログ
  • CtaskbarlistDlg::CtaskbarlistDlg(CWnd* pParent /*=NULL*/)
  •     : CDialog(CtaskbarlistDlg::IDD, pParent)
  • {
  • }
  • void CtaskbarlistDlg::DoDataExchange(CDataExchange* pDX)
  • {
  •     CDialog::DoDataExchange(pDX);
  • }
  • BEGIN_MESSAGE_MAP(CtaskbarlistDlg, CDialog)
  •     ON_WM_SYSCOMMAND()
  •     ON_WM_PAINT()
  •     ON_WM_QUERYDRAGICON()
  •     //}}AFX_MSG_MAP
  •     ON_BN_CLICKED(IDC_BUTTON1, &CtaskbarlistDlg::OnBnClickedButton1)
  •     ON_BN_CLICKED(IDC_BUTTON2, &CtaskbarlistDlg::OnBnClickedButton2)
  •     ON_BN_CLICKED(IDC_BUTTON3, &CtaskbarlistDlg::OnBnClickedButton3)
  •     ON_BN_CLICKED(IDC_BUTTON5, &CtaskbarlistDlg::OnBnClickedButton5)
  •     ON_BN_CLICKED(IDC_BUTTON6, &CtaskbarlistDlg::OnBnClickedButton6)
  • END_MESSAGE_MAP()
  • // CtaskbarlistDlg メッセージ ハンドラ
  • BOOL CtaskbarlistDlg::OnInitDialog()
  • {
  •     CDialog::OnInitDialog();
  •     // "バージョン情報..." メニューをシステム メニューに追加します。
  •     // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
  •     // TODO: 初期化をここに追加します。
  •     if ( !m_taskbarList3.Initialize ( m_hWnd ) )
  •     {
  •         AfxMessageBox ( "初期化に失敗しました" );
  •     }
  •     
  •     return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
  • }
  • void CtaskbarlistDlg::OnSysCommand(UINT nID, LPARAM lParam)
  • {
  •     CDialog::OnSysCommand(nID, lParam);
  • }
  • // ダイアログに最小化ボタンを追加する場合、アイコンを描画するための
  • // 下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、
  • // これは、Framework によって自動的に設定されます。
  • void CtaskbarlistDlg::OnPaint()
  • {
  •     if (IsIconic())
  •     {
  •         CPaintDC dc(this); // 描画のデバイス コンテキスト
  •         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  •     }
  •     else
  •     {
  •         CDialog::OnPaint();
  •     }
  • }
  • // ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、
  • // システムがこの関数を呼び出します。
  • HCURSOR CtaskbarlistDlg::OnQueryDragIcon()
  • {
  •     return static_cast<HCURSOR>(m_hIcon);
  • }
  • void CtaskbarlistDlg::OnBnClickedButton1()
  • {
  •     // TODO: ここにコントロール通知ハンドラ コードを追加します。
  •     m_taskbarList3.SetProgress ( ( ULONGLONG ) 70, ( ULONGLONG ) 100, TBPF_NORMAL );
  • }
  • void CtaskbarlistDlg::OnBnClickedButton2()
  • {
  •     // TODO: ここにコントロール通知ハンドラ コードを追加します。
  •     m_taskbarList3.SetProgress ( ( ULONGLONG ) 80, ( ULONGLONG ) 100, TBPF_PAUSED );
  • }
  • void CtaskbarlistDlg::OnBnClickedButton3()
  • {
  •     // TODO: ここにコントロール通知ハンドラ コードを追加します。
  •     m_taskbarList3.SetProgress ( ( ULONGLONG ) 90, ( ULONGLONG ) 100, TBPF_ERROR );
  • }
  • void CtaskbarlistDlg::OnBnClickedButton5()
  • {
  •     // TODO: ここにコントロール通知ハンドラ コードを追加します。
  •     m_taskbarList3.SetNoProgress ();
  • }
  • void CtaskbarlistDlg::OnBnClickedButton6()
  • {
  •     // TODO: ここにコントロール通知ハンドラ コードを追加します。
  •     m_taskbarList3.SetProgressIndeterminate ();
  • }
  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita