閺€鎯版 (0) +1 鐠э拷 (0) +1 闊拷 (0) +1
閺€鎯版閹存劕濮�閺屻儳婀呴弨鎯版>>

正在阅读:Internet Explorer编程简述(四)Internet Explorer编程简述(四)

2004-09-23 14:43 出处:CSDN 作者:CathyEagle 责任编辑:huangpeidan

  我们注意到这里的“AddFavorite”函数并没有像“DoOrganizeFavDlg”那样需要一个父窗口句柄。这也导致与在IE中打开不同,通过IShellUIHelper接口显示出来的“添加到收藏夹”对话框是“非模态”的,有一个独立于我们应用程序的任务栏按钮,这使我们的浏览器显得非常不专业(我是个追求完美的人,这也是我的浏览器迟迟不能发布的原因之一)。

  于是我们很自然地想到“shdocvw.dll”中除了“DoOrganizeFavDlg”外,应该还有一个类似的函数,可以传入一个父窗口句柄用以显示模态窗口,也许就像这样:


  typedef UINT (CALLBACK* LPFNADDFAV)(HWND, LPTSTR, LPTSTR);

  事实上,这样的函数确实存在于“shdocvw.dll”中,那就是“DoAddToFavDlg”。


  3、DoAddToFavDlg函数

  “DoAddToFavDlg”函数也是“shdocvw.dll”暴露出来的函数之一,其原型如下:


  typedef BOOL (CALLBACK* LPFNADDFAV)(HWND, TCHAR*, UINT, TCHAR*, UINT,LPITEMIDLIST);

  第一个参数正是我们想要的父窗口句柄,第二和第四个参数分别是初始目录(一般来说就是收藏夹目录)和要添加的链接的名字(比如网页的Title),第三和第五个参数分别是第二和第四两个缓冲区的长度,而最后一个参数则是指向与第二个参数目录相关的item identifier list的指针(PIDL)。但最奇怪的是这里并没有像“AddFavorite”函数一样的链接URL,那链接是怎样添加的呢?答案是“手动创建”。

  第二个参数在函数调用返回后会包含用户在“添加到收藏夹”对话框中选择或创建的完整链接路径名(如“X:\XXX\mylink.url”),我们就根据这个路径和网页的URL来创建链接,代码如下(为简化,此处省去检查"shdocvw.dll"是否已在内存中的代码,参见《Internet Explorer 编程简述(三)“整理收藏夹”对话框》):


  void CMyHtmlView::OnFavAddtofav()
  {
  typedef BOOL (CALLBACK* LPFNADDFAV)(HWND, TCHAR*, UINT, TCHAR*, UINT,LPITEMIDLIST);

  HMODULE hMod = (HMODULE)LoadLibrary("shdocvw.dll");
  if (hMod)
  {
  LPFNADDFAV lpfnDoAddToFavDlg = (LPFNADDFAV)GetProcAddress( hMod, "DoAddToFavDlg");
  if (lpfnDoAddToFavDlg)
  {
  TCHAR szPath[MAX_PATH];
  LPITEMIDLIST pidlFavorites;

  if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_FAVORITES, TRUE) &&
  (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidlFavorites))))
  {
  TCHAR szTitle[MAX_PATH];
  strcpy(szTitle, GetLocationName());

  TCHAR szURL[MAX_PATH];
  strcpy(szURL, GetLocationURL());

  BOOL bOK = lpfnDoAddToFavDlg(m_hWnd, szPath,
  sizeof(szPath)/sizeof(szPath[0]), szTitle,
  sizeof(szTitle)/sizeof(szTitle[0]), pidlFavorites);
  CoTaskMemFree(pidlFavorites);

  if (bOK)
  CreateInternetShortcut( szURL, szPath, "");  //创建Internet快捷方式
  }
  }
  FreeLibrary(hMod);
  }
  return;
  }

系列文章:Internet Explorer编程简述(一) (二) (三) (四)


察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
閹靛婧€鐠佸潡妫�閸ョ偛鍩屾い鍫曞劥