![]()
開いているページでスクリプトエラーが発生したときにステータスバーにアイコンを表示する機能を実装する前段階として、今回はステータスバーにアイコンを表示するテストを行う。
#define OEMRESOURCE //■追加 OEMアイコンを利用する
//■追加
//アイコンを管理
//アイコンを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; //■追加
//■追加アイコン表示。テスト用。確認したら削除すること ::SendMessage(m_hWndStatusBar,SB_SETICON,0,(LPARAM)_cIconList.GetIcon(CIconManager::ICON_WARNING_SM));
![]()
これでビルド/実行するとステータスバーにエラー表示用のアイコンが表示された。
次回はページにエラーが発生したときにこのアイコンが表示されるようにする。
