鏀惰棌 (0) +1 璧� (0) +1 韪� (0) +1
鏀惰棌鎴愬姛鏌ョ湅鏀惰棌>>

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

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


  HRESULTIDocHostUIHandler::ShowContextMenu(
  DWORD dwID,
  POINT *ppt,
  IUnknown *pcmdtReserved,
  IDispatch *pdispReserved
  );

  dwID参数的意义与Contexts的组合类似;ppt为菜单的弹出点屏幕坐标;pcmdtReserved接口指向IOleCommandTarget接口,可用于检测网页对象的状态和执行命令等操作。pdispReserved在IE5以上版本中指向的是网页对象的IDispatch接口,用以区分不同对象,比如我们可以这样来获得网页对象的指针:


  IHTMLElement *pElem;
  HRESULT hr;
  hr = pdispReserved->QueryInterface(IID_IHTMLElement, (void**)pElem);
  if(SUCCEEDED (hr)) {
  BSTR bstr;
  pElem->get_tagName(bstr);
  USES_CONVERSION;
  ATLTRACE("TagName:%s\n", OLE2T(bstr));
  SysFreeString(bstr);
  pElem->Release();
  }

  如果我们在该方法中返回S_OK,则告诉MSHTML我们将使用自己的菜单(界面),如果是S_FALSE,则弹出默认的菜单。

  2)实现
  原理清楚之后,实现起来非常简单,和弹出一般的菜单没什么两样,举例如下,显示主框架的“文件菜单”:


  HRESULT CMyHtmlView::OnShowContextMenu(DWORD dwID, LPPOINT ppt, IUnknown * pcmdtReserved, IDispatch *)
  {
  // 载入主菜单
  HMENU hMenuParent = ::LoadMenu( ::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME) );
  if (hMenuParent)
  {
  HMENU hMenu = ::GetSubMenu( hMenuParent, 0 ); // 取得“文件”子菜单
  if (hMenu)
  {
  // 显示菜单
  TrackPopupMenuEx( hMenu,
  TPM_LEFTALIGN | TPM_TOPALIGN,
  ppt->x,
  ppt->y,
  ::AfxGetMainWnd()->m_hWnd,
  NULL );

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


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

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

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
鎵嬫満璁块棶鍥炲埌椤堕儴