![]()
今回はステータスバーにアクセスしているURLに応じて「インターネット」や「コンピュータ」「信頼済みサイト」などのインターネットゾーン表示をする。
#define WINVER 0x0500 #define _WIN32_WINNT 0x0501 #define _WIN32_IE 0x0603 //■変更 IE6SP2以降 #define _RICHEDIT_VER 0x0200
//■追加
//ゾーンの取得
bool GetZone(LPCTSTR pszURL,DWORD& dwZone)
{
HRESULT hr;
CAtlStringW ustrURL(pszURL);
CComPtr<IInternetSecurityManager> pIInternetSecurityManager;
dwZone = URLZONE_INVALID;
pIInternetSecurityManager.CoCreateInstance(CLSID_InternetSecurityManager,NULL,CLSCTX_INPROC_SERVER);
if(pIInternetSecurityManager == NULL)
return false;
hr = pIInternetSecurityManager->MapUrlToZone(ustrURL,&dwZone,0);
return SUCCEEDED(hr) ? true : false;
}
//メインウインドウへアドレス変更を通知する
bool NotifyChangeURL(LPCTSTR pszURL)
{
//■追加
//インターネットゾーンの取得
{
DWORD dwZone;
GetZone(pszURL,dwZone);
_wndStatusbar.SetZone(dwZone); //ステータスバーへ設定
}
if(_pTabView == NULL)
return false;
if(_pTabView->GetActivePage() != _pTabView->PageIndexFromHwnd(m_hWnd))
return false; //このビューがアクティブでなければ処理しない
GetTopLevelWindow().SendMessage(WM_DNP_CHANGEADDRESS,(WPARAM)pszURL);
return true;
}
class CIELikeStatusbar : public CWindowImpl<CIELikeStatusbar>
{
CIconManager _cIconList;
CProgressBarCtrl _wndProgressBar; //ステータスバーに配置するプログレスバーコントロール
CAtlString _strText;
long _nLastProgress; //最後に受け取ったプログレス情報
long _nLastProgressMax; //最後に受け取ったプログレス最大値
bool _bPageError; //現在のページでスクリプトエラーなどがあればtrue、通常はfalse
bool _bPrivate; //現在のページがプライバシーインパクト状態ならtrue、通常はfalse
bool _bSecure; //現在のページがセキュアならtrue、通常はfalse
DWORD _dwZone; //■追加 現在のページのゾーン
HWND _hWndNotify; //ダブルクリック通知先。通常ビューウインドウのHWND
public:
CIELikeStatusbar()
{
_hWndNotify = NULL;
_nLastProgress = -1;
_nLastProgressMax = -1;
_bPageError = false;
_bPrivate = false;
_bSecure = false;
_dwZone = URLZONE_INVALID; //■追加
}
//ステータスバー表示更新
bool Refresh(bool bCapture)
{
if(bCapture == false)
{
if(_wndProgressBar.IsWindow())
{
if(_wndProgressBar.IsWindowVisible())
_wndProgressBar.ShowWindow(SW_HIDE); //不可視に
}
return true;
}
if(IsWindow() == FALSE)
return false;
UpdateLayout(); //レイアウト調整
//ステータスバーのテキスト変更
{
SetText(_strText);
}
//ステータスバーのアイコン変更
{
SetPageError(_bPageError);
SetPrivacy(_bPrivate);
SetSecure(_bSecure);
}
//■追加
//ゾーン設定
{
SetZone(_dwZone);
}
return true;
}
//■追加
bool SetZone(DWORD dwZone)
{
_dwZone = dwZone;
if(IsWindow() == FALSE)
return true; //trueを返す
//ゾーンのテキストをステータスバーに表示
{
ZONEATTRIBUTES sZoneAttributes;
CComPtr<IInternetZoneManager> pIInternetZoneManager;
::ZeroMemory(&sZoneAttributes,sizeof(ZONEATTRIBUTES));
sZoneAttributes.cbSize = sizeof(ZONEATTRIBUTES);
pIInternetZoneManager.CoCreateInstance(CLSID_InternetZoneManager,NULL,CLSCTX_INPROC_SERVER);
if(pIInternetZoneManager)
pIInternetZoneManager->GetZoneAttributes(dwZone,&sZoneAttributes);
CAtlString strZone = sZoneAttributes.szDisplayName;
CStatusBarCtrl wndStatusBar = m_hWnd;
wndStatusBar.SetText(PAIN_ZONE,strZone);
}
return true;
}
![]()
これでビルド/実行するとステータスバーに開いているページのゾーン名が表示されるようになった。
次回はゾーン名に加えてゾーン用のアイコンを表示する。
