第32回 ステータスバーにアイコンを表示する (タブブラウザーを作る)

tabbrowser127.gif
開いているページでスクリプトエラーが発生したときにステータスバーにアイコンを表示する機能を実装する前段階として、今回はステータスバーにアイコンを表示するテストを行う。

Windowsにはエラー表示用のアイコンがOEMリソースとして用意されている。その利用を「stdafx.h」内の最初で定義する。
#define	OEMRESOURCE			//■追加 OEMアイコンを利用する

tabbrowser128.gif 次にOEMリソースからスモールアイコンを読み込み、管理するためのクラスCIconManagerを作る。今回は1つのアイコンのみを管理しているが、このクラスは今後順次機能を追加する予定だ。
//■追加
//アイコンを管理
//アイコンをAddする関数などは未実装。今後追加
class	CIconManager
{
protected:
	CAtlArray<HICON>	_ahIcon;		//アイコンリスト

public:
	CIconManager()
	{
		SetFixedIndexIcon();		//固定インデックスのアイコンを追加
	}

	~CIconManager()
	{
		Destroy();
	}

	enum	ICON_INDEX
	{
		ICON_WARNING_SM = 0,			//警告アイコン。スクリプトエラー時に利用
	};

	HICON	GetIcon(UINT nIconIndex)
	{
		if(nIconIndex >= _ahIcon.GetCount())
			return	NULL;

		return	_ahIcon[nIconIndex];
	}

protected:

	//固定インデックスのアイコンを追加
	//かならずICON_INDEXと同じ値になるようにする
	bool	SetFixedIndexIcon(void)
	{
		ATLASSERT(_ahIcon.GetCount() == 0);		//すでに設定されてる?
		if(_ahIcon.GetCount())
			return	false;

		size_t	nIndex;
		HICON	hIcon;

		//警告アイコン
		//LoadImageで32x32を読み込み、CopyImageで16x16に縮小。LoadImageのHICONはLR_SHAREDなのでDestroyIcon必要なし
		hIcon = (HICON)::LoadImage(NULL,MAKEINTRESOURCE(OIC_WARNING),IMAGE_ICON,0,0,LR_DEFAULTSIZE | LR_SHARED);
		hIcon = (HICON)::CopyImage(hIcon,IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_COPYFROMRESOURCE);
		nIndex = _ahIcon.Add(hIcon);
		ATLASSERT(nIndex == ICON_WARNING_SM);

		return	true;
	}

	//保持してるアイコンの破棄
	void	Destroy(void)
	{
		size_t	i;
		size_t	nSize;

		nSize = _ahIcon.GetCount();
		for(i = 0; i < nSize; i++)
		{
			if(_ahIcon[i] == NULL)
				continue;
			::DestroyIcon(_ahIcon[i]);
		}
		_ahIcon.RemoveAll();
	}
};


class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
		public CMessageFilter, public CIdleHandler
{
	CAddressBarCtrl	_wndAddressBar;			// アドレスバー用コンボボックス

	CIconManager	_cIconList;		//■追加

tabbrowser129.gif そしてOnCreate内にアイコンをステータスバーに表示するためのテストコードを1行追加する。この1行のコードはアイコンが表示されることを確認したら削除する。
		//■追加アイコン表示。テスト用。確認したら削除すること
		::SendMessage(m_hWndStatusBar,SB_SETICON,0,(LPARAM)_cIconList.GetIcon(CIconManager::ICON_WARNING_SM));

tabbrowser130.gif
これでビルド/実行するとステータスバーにエラー表示用のアイコンが表示された。

次回はページにエラーが発生したときにこのアイコンが表示されるようにする。

プロジェクトファイルをダウンロード


カテゴリー「タブブラウザーを作る」 のエントリー