Internet Explorer 编程简述(三)“整理收藏夹”对话框

本文介绍了如何在Internet Explorer中调用整理收藏夹和添加到收藏夹的对话框,提供了具体的代码实现,并讨论了不同IE版本间的差异。
 

关于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的“整理收藏夹”对话框(原先的设计)

 

 

“添加到收藏夹”就不同了,“DoAddToFavDlg”函数不再像“DoOrganizeFavDlg”函数一样对所有IE的版本都适用。

 

 

参考资料

MSDN: Adding Internet Explorer Favorites to Your Application

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值