#pragma once

#include <shellapi.h>

/*!
 * タスクバーの通知領域のアイコン
 */
class CTaskIcon
{
private:
	CTaskIcon( const CTaskIcon& ); //<! 実装なし
	CTaskIcon& operator=( const CTaskIcon& ); //<! 実装なし

public:

	/*!
	 * 初期化
	 */
	CTaskIcon( HWND v_hWnd, UINT v_uID, UINT v_uMessageID, UINT v_hIconID, UINT v_uDefaultMessageID );

	/*!
	 * 仮想デストラクタ
	 */
	virtual ~CTaskIcon();

	/*!
	 * アイコンを作成します。
	 * \param hWnd メインウィンドウへのハンドル
	 * \param nMessageID 通知メッセージID
	 */
	virtual void Create();

	/*!
	 * アイコンを強制作成します。
	 * シェルが落ちた後にシェルが再起動した通知をうけて作成されます。
	 * \param hWnd メインウィンドウへのハンドル
	 * \param nMessageId 通知メッセージID
	 */
	virtual void ReCreate();

	/*!
	 * 指定したメッセージをチップにします。
	 * \param title チップ
	 */
	virtual void ShowMessage(LPCTSTR title);

	/*!
	 * デフォルトメッセージに戻します。
	 */
	virtual void ShowDefault();

	/*!
	 * アイコンを破棄します。
	 */
	virtual void Destroy();

	/*!
	 * フォーカスをトレイに戻します。
	 */
	virtual void SetFocusToTray();

protected:

	const HWND hWnd_;

	const UINT uMessageID_;

	const UINT uID_;

	const UINT uIconID_;

	const UINT uDefaultMessageId_;

	/*!
	 * アイコン作成済み
	 */
	bool bCreated_;

	/*!
	 * 通知領域への構造体
	 */
	NOTIFYICONDATA icondata_;
};
