WEB开发网
开发学院软件开发VC 如何禁用HTML页面的上下文菜单 阅读

如何禁用HTML页面的上下文菜单

 2008-01-19 20:26:04 来源:WEB开发网   
核心提示:Dialog AfxFrameOrView42d// CHtmlCtrl Shell Embedding Shell DocObject View Internet Explorer_Server它是个接收输入的Internet Explorer_Server服务器窗口,并且如果你想要截获WM_CONTEXTMENU消

Dialog
 AfxFrameOrView42d   // CHtmlCtrl
  Shell Embedding
  Shell DocObject View
   Internet Explorer_Server

它是个接收输入的Internet Explorer_Server服务器窗口,并且如果你想要截获WM_CONTEXTMENU消息,必须子类化这个窗口。在MFC中,这意味着你必须获取HWND并调用SubclassWindow。记住了,这是一种非常规方式,而且微软的那帮家伙也明确禁止这样做,不过我还是根据原来的程序写了另一个版本AboutHtml2,我这么做了。

图二在Spy++中的父/子关系

获得这个神秘的Internet Explorer_Server HWND的方法有很多种。但FindWindow不行,因为它只能得到顶层窗口。由于此服务器窗口是浏览器的曾孙(great-grandchild),在所有层次上都没有同胞兄弟,所以下列算法成立:

static HWND GetLastChild(HWND hwndParent)
{
  HWND hwnd = hwndParent;
  while (TRUE) {
    HWND hwndChild = ::GetWindow(hwnd, GW_CHILD);
    if (hwndChild==NULL)
     return hwnd;
    hwnd = hwndChild;
  }
  return NULL;
}

这个函数假设只有单子继承链,如同浏览器中的一个窗口——即每个父窗口肯定有一个子窗口——并且获取最末尾(或最小)的子窗口就是Internet Explorer_Server窗口。一旦取得HWND,剩下的事情便是写一个新的MFC类对它进行子类化。

class CMyIEWnd : public CWnd {
public:
  afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos) { }
  DECLARE_MESSAGE_MAP();
};

Tags:如何 禁用 HTML

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接