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

2004-09-27 15:06 出处:CSDN 作者:CathyEagle 责任编辑:linjixiong

  }
  ::DestroyMenu( hMenuParent );
  }
  return S_OK;
  }

  4、自定义标准上下文菜单
  1)原理
  更多的时候我们希望能在浏览器原来菜单的基础上作一些修改,如删掉“查看源文件”,添加自己的菜单项,等等,而不是完全不要原始的菜单,怎么办呢?借助MSDN提供的例子,我们来看看:


  HRESULT CBrowserHost::ShowContextMenu(DWORD dwID, POINT *ppt,IUnknown *pcmdTarget,IDispatch *pdispObject)
  {
  #define IDR_BROWSE_CONTEXT_MENU 24641
  #define IDR_FORM_CONTEXT_MENU 24640
  #define SHDVID_GETMIMECSETMENU 27
  #define SHDVID_ADDMENUEXTENSIONS 53

  HRESULT hr;
  HINSTANCE hinstSHDOCLC;
  HWND hwnd;
  HMENU hMenu;

  CComPtr<IOleCommandTarget> spCT;
  CComPtr<IOleWindow> spWnd;

  MENUITEMINFO mii = {0};
  CComVariant var, var1, var2;
  hr = pcmdTarget->QueryInterface(IID_IOleCommandTarget, (void**)&spCT);
  hr = pcmdTarget->QueryInterface(IID_IOleWindow, (void**)&spWnd);
  hr = spWnd->GetWindow(&hwnd);//取得浏览器窗口句柄
  hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL"));
  if (hinstSHDOCLC == NULL)
  {
  // Error loading module -- fail as securely as possible
  return;
  }
  hMenu = LoadMenu(hinstSHDOCLC, MAKEINTRESOURCE(IDR_BROWSE_CONTEXT_MENU));
  hMenu = GetSubMenu(hMenu, dwID);
  // Get the language submenu
  hr = spCT->Exec(&CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, NULL, &var);
  mii.cbSize = sizeof(mii);
  mii.fMask = MIIM_SUBMENU;
  mii.hSubMenu = (HMENU) var.byref;
  // Add language submenu to Encoding context item
  SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, &mii);
  // Insert Shortcut Menu Extensions from registry
  V_VT(&var1) = VT_INT_PTR;
  V_BYREF(&var1) = hMenu;

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

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

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

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品