![]()
前回はInternet Explore用に登録されている「お気に入り」をメニューとして表示する処理を実装した。今回は選択された「お気に入り」のインターネットショートカットからURLを取り出して実際に「タブ」として開く処理を追加する。
#include "intshcut.h" //■追加
![]()
次に同じ「MainFrm.h」内の前回作成した「お気に入り」が選択されたときの処理内容を書き換える。また、インターネットショートカットファイルからURLを取り出すための関数も追加する。
//■処理内容変更
//「お気に入り」が選択されたときの処理
LRESULT OnFavorite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
bool ret;
CAtlString strFolder;
CAtlString strFile;
CAtlString strURL;
//選択されたお気に入りのファイル名を取得
ret = _cFovMenu.GetPathFromID(wID,strFolder,strFile);
if(ret == false)
{
bHandled = FALSE;
return 0;
}
ret = GetInternetShortcut(strFolder + strFile,strURL);
if(ret == false)
return 0;
//タブとしてURLを開く
{
int nPage;
CTabBrowser100View* pView = NULL;
nPage = m_view.GetActivePage();
if(nPage >= 0)
{
//現在のタブからビューを取得
pView = (CTabBrowser100View*)m_view.GetPageData(nPage);
}
if(pView == NULL)
{
//新しいタブを作成
pView = new CTabBrowser100View(&m_view); //タブビューのポインタを渡しておく
pView->Create(m_view, rcDefault, _T("about:blank"), WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL, 0);
m_view.AddPage(pView->m_hWnd, _T("Document"),-1,pView);
}
//URLを開く
pView->Navigate(strURL);
}
return 0;
}
//■追加
//インターネットショートカットからそれが示すURLを取得する
bool GetInternetShortcut(LPCTSTR pszFile,CAtlString& strURL)
{
HRESULT hr;
LPWSTR pwszURL;
CComPtr<IMalloc> pIMalloc;
CComPtr<IPersistFile> pIPersistFile;
CComPtr<IUniformResourceLocator> pIUniformResourceLocator;
strURL = _T("");
::CoCreateInstance(CLSID_InternetShortcut,NULL,CLSCTX_INPROC_SERVER,IID_IUniformResourceLocator,(void**)&pIUniformResourceLocator);
if(pIUniformResourceLocator == NULL)
return false;
pIUniformResourceLocator->QueryInterface(IID_IPersistFile,(void**)&pIPersistFile);
if(pIPersistFile == NULL)
return false;
hr = pIPersistFile->Load(CComBSTR(pszFile),STGM_READ | STGM_SHARE_DENY_NONE);
if(FAILED(hr))
return false;
hr = pIUniformResourceLocator->GetURL(&pwszURL);
if(FAILED(hr))
return false;
strURL = pwszURL;
hr = ::SHGetMalloc(&pIMalloc);
if(SUCCEEDED(hr))
pIMalloc->Free(pwszURL);
return true;
}
![]()
これでビルド/実行すると、選択した「お気に入り」がタブとして開くようになった。
4月1日から作り始めたWTLのタブブラウザー。まだ思いついて2日だがだんだんブラウザーっぽい機能が増えてきてそれらしくなってきた。それに比例してソースコードの方はスパゲティ状でタ重複コードがどんどん増えてきた。そろそろさすがに整理しないとまずい気もするが、、、まだ放置して次回は「お気に入りに追加」機能を実装する。
