OrangeMaker_logo
memo アイコン SDK-MFC 備忘録

Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)

Windows7 タスクバーのオーバレイアイコン

2009/12/27 作成

タスクバーのアプリケーションボタンにオーバレイアイコン(右下に表示する小さなアイコン)の表示は
ITaskbarList3 インタフェースのSetOverlayIcon()を使用します。使用方法は単純です。

オーバレイアイコンの設定:
 VOID CMyDlg::setOverLay(HICON hIcon, CString description)
 {
     // Create an instance of ITaskbarList3
     ITaskbarList3 *ptbl;
     HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, 
         CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&ptbl));
		
     if (SUCCEEDED(hr)){
         // Attach the toolbar to the thumbnail.
         hr = ptbl->SetOverlayIcon(this->m_hWnd, 
             hIcon, description);
     }
     else{
         //error !comインスタンス生成失敗
     }
     ptbl->Release();
 }
	
オーバレイアイコンの解除:
 VOID CMyDlg::resetOverLay()
 {
     // Create an instance of ITaskbarList3
     ITaskbarList3 *ptbl;
     HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, 
         CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&ptbl));
		
     if (SUCCEEDED(hr)){
         // Attach the toolbar to the thumbnail.
         hr = ptbl->SetOverlayIcon(this->m_hWnd, NULL, _T(""));
     }
     else{
         //error !comインスタンス生成失敗
     }
     ptbl->Release();
 }
	
		

上記のset関数でワーニングアイコン(Windowsのシステムアイコンを使用)を表示するには

  HICON hWarningIcon = AfxGetApp()->LoadStandardIcon(IDI_WARNING);
	
 setOverLay(hWarningIcon, _T("Warning"));
		

とやるとこんな表示になります。

オーバレイアイコンサンプル  

※ITaskbarList3インタフェースはTaskbarButtonCreatedメッセージを確認した後に使用する規定になっています。アプリケーション起動時からオーバレイアイコンを表示する場合注意が必要です。
(メッセージの確認方法は「Windows7 ThumbnailToolbar ボタンを作る」を参照してください)
※オーバレイアイコンは単純に最後に設定した状態が表示されます。複数インスタンスのアプリやグループ化した場合アプリ側のインスタンス間で表示状態を調停する機構を考慮する必要がある。(と思う。。例えばブロードキャストメッセージ、共有メモリ、共有DLL、レジストリ、etc)