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

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

 2008-01-19 20:26:04 来源:WEB开发网   
核心提示:这个类重载WM_CONTEXTMENU,其它什么事情也不做:OnContextMenu是个空函数,如何禁用HTML页面的上下文菜单(3),返回的东西不显示菜单,也不调用基类(CWnd)的方法,等于是把所有赌注放进去了,记住不要用不正当的方式去玩弄浏览器,使用CMyIEWnd时,在CMyHtmlCtrl中添加一个实例:/

这个类重载WM_CONTEXTMENU,其它什么事情也不做:OnContextMenu是个空函数,返回的东西不显示菜单,也不调用基类(CWnd)的方法。使用CMyIEWnd时,在CMyHtmlCtrl中添加一个实例:

//
class CMyHtmlCtrl : public CHtmlCtrl {
protected:
  CMyIEWnd m_myIEWnd;
};
//

把这一切联系在一起的最关键的一步是调用SubclassWindow。但在哪里调用以及什么时候调用呢?最好时机是在浏览器加载页面之后。

void CMyHtmlCtrl::OnNavigateComplete2(LPCTSTR strURL)
{
  if (!m_myIEWnd.m_hWnd) {
    HWND hwnd = GetLastChild(m_hWnd);
    m_myIEWnd.SubclassWindow(hwnd);
  }
}

具体处理过程是这样的:当用户打开“关于”对话框,对话框创建CHtmlCtrl窗口来打开文档,当浏览器将文档打开以后,它发送一个通知,MFC将这个通知定向到OnNavigateComplete2。CMyHtmlCtrl::OnNavigateComplete2调用GetLastChild来获得“真正的”输入窗口并将它子类化。这时所有的消息将通过CMyIEWnd类去往Internet Explorer_Server,包括WM_CONTEXTMENU。这里要注意,IE的HWND是可以修改的,所以如果除了“关于”对话框外,你还想做一些其它的事情的话,必须要对HWND进行反子类化(unsubclass)和重子类化(resubclass)处理。

使用这个技术有两个重要事情需要注意。第一,它功能很强,因为你子类化了“真正的”IE窗口,你可以做几乎任何事情。第二,如果你不小心而使用不当,那将会发生最糟糕最糟糕的事情。一旦你用这种方法控制了资源管理器窗口,等于是把所有赌注放进去了。记住不要用不正当的方式去玩弄浏览器,而是要通过正式接口(IDocHostUIHandler)定制它!否则后果不堪设想。

上一页  1 2 3 

Tags:如何 禁用 HTML

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