Internet Explorer編程簡述(三)
關于Internet Explorer的收藏夾,比較常見的兩個問題就是調用“整理收藏夾”對話框和“添加到收藏夾”對話框。調用的方法有多種,但其中還是有些值得討論的地方。關鍵字:添加到收藏夾,整理收藏夾,DoAddToFavDlg, DoOrganizeFavDlg
1、整理收藏夾
調用“整理收藏夾”對話框(如下),基本上來說都用的是同一個方法,即調用“shdocvw.dll”中的“DoOrganizeFavDlg”函數,把父窗口句柄和收藏夾路徑作為參數傳入即可。
2、代碼
代碼實例如下所示,值得注意的是對“shdocvw.dll”的處理,為避免重復調用,應該先檢查其是否已經在內存中。
void CMyHtmlView::OnFavOrganizefav() bool bResult = false; HMODULE hMod = ::GetModuleHandle( _T("shdocvw.dll") ); if (hMod == NULL)//如果"shdocvw.dll"尚未載入則載入之 if (hMod == NULL) |
MessageBox( _T("The dynamic link library ShDocVw.DLL cannot be found."), if (lpfnDoOrganizeFavDlg == NULL) TCHAR szPath [ MAX_PATH ]; hr = ::SHGetSpecialFolderPath( m_hWnd, szPath, CSIDL_FAVORITES, TRUE ); bResult = (*lpfnDoOrganizeFavDlg) ( m_hWnd, szPath ) ? true : false; ::FreeLibrary( hMod ); if (lpfnDoOrganizeFavDlg == NULL) TCHAR szPath [ MAX_PATH ]; hr = ::SHGetSpecialFolderPath( m_hWnd, szPath, CSIDL_FAVORITES, TRUE ); |
bResult = (*lpfnDoOrganizeFavDlg) ( m_hWnd, szPath ) ? true : false; return;
|
3、討論
實際上,從“DoOrganizeFavDlg”函數的原型聲明我們可以看到,由于需要一個路徑,所以“整理收藏夾”對話框其實不僅可以用來整 理收藏夾,還可以整理磁盤上的目錄。而且所謂的整理也不過是提供了一個對話框使用戶用起來比較方便而已,和直接在資源管理器中整理沒有實質性的差別。因此 調用“整理收藏夾”對話框的方法從IE4.0開始就沒有變過,除了對話框的布局有所改變。
typedef UINT (CALLBACK* LPFNORGFAV)(HWND, LPTSTR); |
IE 4.0的“整理收藏夾”對話框
IE 4.0的“整理收藏夾”對話框(原本的設計)
“添加到收藏夾”就不同了,“DoAddToFavDlg”函數不再像“DoOrganizeFavDlg”函數一樣對所有IE的版本都適用。
參考資料:
MSDN: Adding Internet Explorer Favorites to Your Application
posted on 2007-07-29 15:10 旅途 閱讀(896) 評論(0) 編輯 收藏 引用 所屬分類: BHO