关于Internet Explorer的收藏夹,比较常见的两个问题就是调用“整理收藏夹”对话框和“添加到收藏夹”对话框。调用的方法有多种,但其中还是有些值得讨论的地方。
关键字:添加到收藏夹,整理收藏夹,DoAddToFavDlg, DoOrganizeFavDlg
1、整理收藏夹
调用“整理收藏夹”对话框(如下),基本上来说都用的是同一个方法,即调用“shdocvw.dll”中的“DoOrganizeFavDlg”函数,把父窗口句柄和收藏夹路径作为参数传入即可。
2、代码
代码实例如下所示,值得注意的是对“shdocvw.dll”的处理,为避免重复调用,应该先检查其是否已经在内存中。
void CMyHtmlView::OnFavOrganizefav() { typedef UINT (CALLBACK* LPFNORGFAV)(HWND, LPTSTR);
bool bResult = false;
HMODULE hMod = ::GetModuleHandle( _T("shdocvw.dll") );
if (hMod == NULL)//如果"shdocvw.dll"尚未载入则载入之 { hMod = ::LoadLibrary( _T("shdocvw.dll") );
if (hMod == NULL) { MessageBox( _T("The dynamic link library ShDocVw.DLL cannot be found."), _T("Error"), MB_OK | MB_ICONSTOP ); return; } LPFNORGFAV lpfnDoOrganizeFavDlg = (LPFNORGFAV) ::GetProcAddress( hMod, "DoOrganizeFavDlg" );
if (lpfnDoOrganizeFavDlg == NULL) { MessageBox( _T("The entry point DoOrganizeFavDlg cannot be found\n") _T("in the dynamic link library ShDocVw.DLL."), _T("Error"), MB_OK | MB_ICONSTOP ); return; }
TCHAR szPath [ MAX_PATH ]; HRESULT hr;
hr = ::SHGetSpecialFolderPath( m_hWnd, szPath, CSIDL_FAVORITES, TRUE ); if (FAILED(hr)) { MessageBox( _T("The path of the Favorites folder cannot be found."), _T("Error"), MB_OK | MB_ICONSTOP ); return; }
bResult = (*lpfnDoOrganizeFavDlg) ( m_hWnd, szPath ) ? true : false;
::FreeLibrary( hMod ); } else//如果"shdocvw.dll"已经在调用者进程的地址空间中则直接使用。 { LPFNORGFAV lpfnDoOrganizeFavDlg = (LPFNORGFAV) ::GetProcAddress( hMod, "DoOrganizeFavDlg" );
if (lpfnDoOrganizeFavDlg == NULL) { MessageBox( _T("The entry point DoOrganizeFavDlg cannot be found\n") _T("in the dynamic link library ShDocVw.DLL."), _T("Error"), MB_OK | MB_ICONSTOP ); return; }
TCHAR szPath [ MAX_PATH ]; HRESULT hr;
hr = ::SHGetSpecialFolderPath( m_hWnd, szPath, CSIDL_FAVORITES, TRUE ); if (FAILED(hr)) { MessageBox( _T("The path of the Favorites folder cannot be found."), _T("Error"), MB_OK | MB_ICONSTOP ); return; }
bResult = (*lpfnDoOrganizeFavDlg) ( m_hWnd, szPath ) ? true : false; }
return;
}
3、讨论
实际上,从“DoOrganizeFavDlg”函数的原型声明我们可以看到,由于需要一个路径,所以“整理收藏夹”对话框其实不仅可以用来整理收藏夹,还可以整理磁盘上的目录。而且所谓的整理也不过是提供了一个对话框使用户用起来比较方便而已,和直接在资源管理器中整理没有实质性的差别。因此调用“整理收藏夹”对话框的方法从IE4.0开始就没有变过,除了对话框的布局有所改变。
typedef UINT (CALLBACK* LPFNORGFAV)(HWND, LPTSTR);
IE 4.0的“整理收藏夹”对话框
IE 4.0的“整理收藏夹”对话框(原先的设计)
[1] [2] 下一页 [聊天工具]用Windows98第二版直接共享Internet [系统软件]Internet Explorer 编程简述(繁体版) [系统软件]单击链接后无法打开新的 Internet Explorer 窗口或… [系统软件]delphi2005帮助系统使用了microsoft document exp… [系统软件]对Internet Explorer Web 控件做一点修改 [系统软件]OLE with the internet explorer [系统软件]打造个性化的Internet Explorer [系统软件]3dMax导出.x文件以及3D Explorer [常用软件]微软Internet Explorer 8最新动向 [常用软件]PDF全能管家——PDFExplorer
|