![]()
前回までの作業で「タブ」の部分にそのとき開いているホームページの名前が表示されていた。しかし表示するタイミングがDWebBrowserEvents2 :: DocumentCompleteが届いたとき、、、つまり読み込みが完全に終わったときだったためなかなかタイトルが表示されないという問題があった。今回はタイミングをDWebBrowserEvents2 :: TitleChangeが届いたときにする。
BEGIN_SINK_MAP(CTabBrowser100View)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW2, OnNewWindow2)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
//■以下のSINK_ENTRY_EX追加
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_STATUSTEXTCHANGE, OnStatusTextChange)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE, OnDownloadComplete)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_COMMANDSTATECHANGE, OnCommandStateChange)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_DOWNLOADBEGIN, OnDownloadBegin)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_PROGRESSCHANGE, OnProgressChange)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_PROPERTYCHANGE, OnPropertyChange)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_TITLECHANGE, OnTitleChange)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnNavigateComplete2)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_NAVIGATEERROR, OnNavigateError)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_PRIVACYIMPACTEDSTATECHANGE, OnPrivacyImpactedStateChange)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW3, OnNewWindow3)
SINK_ENTRY_EX(SINKID_EVENTS, DIID_DWebBrowserEvents2, DISPID_SETSECURELOCKICON, OnSetSecureLockIcon)
END_SINK_MAP()
//■追加ここから↓の関数いっぱい
void __stdcall OnStatusTextChange(BSTR bstrText)
{
}
void __stdcall OnDownloadComplete()
{
}
void __stdcall OnCommandStateChange(long lCommand,VARIANT_BOOL vbEnable)
{
}
void __stdcall OnDownloadBegin(void)
{
}
void __stdcall OnProgressChange(long lProgress,long lProgressMax)
{
}
void __stdcall OnPropertyChange(BSTR bstrProperty)
{
}
void __stdcall OnTitleChange(BSTR bstrTitle)
{
//タブに表示されている名前を変更
if(_pTabView == NULL || _pIWebBrowser2 == NULL)
return;
int nPage;
CComBSTR bstr;
nPage = _pTabView->PageIndexFromHwnd(m_hWnd); //このウインドウに関連づいているタブのインデックス取得
_pTabView->SetPageTitle(nPage,(CAtlString)bstrTitle); //タブの名前を変更
}
void __stdcall OnNavigateComplete2(IDispatch *pDisp,VARIANT *vURL)
{
}
void __stdcall OnNavigateError(IDispatch *pDisp,VARIANT *vURL,VARIANT *vTargetFrameName,VARIANT *vStatusCode,VARIANT_BOOL *vbCancel)
{
}
void __stdcall OnPrivacyImpactedStateChange(VARIANT_BOOL vbPrivacyImpacted)
{
}
void __stdcall OnNewWindow3(IDispatch **ppDisp,VARIANT_BOOL *vbCancel,DWORD dwFlags,BSTR bstrUrlContext,BSTR bstrUrl)
{
}
//MSDNにはVARIANTとあるが、longとの間違え
void __stdcall OnSetSecureLockIcon(long lSecureLockIcon)
{
}
//■追加ここまで↑
////////////////////////
//HTMLページが読み終わったときに呼ばれる処理
void _stdcall OnDocumentComplete(IDispatch* pDisp, VARIANT* vURL)
{
//■内部処理を削除
}
![]()
これで「タブ」に変なタイミングでホームページ名が表示されることがなくなった。
次回は「タブ」にアイコンを表示する。
