您現在的位置是:電腦技術吧?>? 組裝維修 ??>??上下文菜單,pyqt5上下文菜單??>??正文詳情

上下文菜單,pyqt5上下文菜單

騰元冬2019-11-15 21:20:41 人圍觀
簡介mac上下文菜單提問:第六期網絡雜志《風投知識庫》上有一篇文章。在VC6中,CHTMLVIEW用于在對話框控件中顯示HTML文件。許多讀者寫道他們非常喜歡這個功能。但它的優點是顯示候選項上

提出問題:   VC知識庫在線雜志第六期有一篇文章VC6中使用CHtmlView在對話框控制中顯示HTML文件,很多讀者來信說很喜歡這種功能。

但是美中不足的是在對話框的HTML頁面上單擊鼠標右鍵會彈出上下文菜單。

從而可以象在IE中那樣看到頁面的源代碼。

為了防止用戶查看HTML代碼,有人嘗試過在CHtmlCtrl派生的窗口中重載WM_CONTEXTMENU,或者在CHtmlView以及CHtmlCtrl類中禁用右鍵的上下文菜單和彈出式菜單,這兩個方法都沒有成功。

那么如何禁用HTML的這個上下文菜單呢? 本文就針對這個問題用不同的方法來完善上次的程序。

  解答:  CHtmlCtrl類可以將CHtmlView轉換成在任何窗口中使用的控制。

我用它寫了一個程序叫AboutHtml,此程序實現了一個HTML對話框。

但疏忽了鼠標右鍵的上下文菜單,所以在HTML對話框中單擊鼠標右鍵,會彈出標準的瀏覽器上下文菜單(如圖一),而這個菜單對于某些人來說可能是多余的。

圖一 不想要的上下文菜單  其實,要解決這個問題有一個非常簡單的辦法,真是易如反掌,甚至不用寫任何C 代碼!只要在HTML頁面中加一行指令即可:  //  //  這條指令告訴瀏覽器不要顯示上下文菜單。

也可以象下面這樣寫:   //  oncontextmenu=ShowMyMenu(); return false  //  ShowMyMenu是一個顯示定制菜單的JavaScript過程。

本文例子代碼之一AboutHtml1使用的就是oncontextmenu。

源代碼可以從本文的開始處下載。

  由于VC知識庫是一個關于C 以及Visual C 的網站,與JavaScript之類的腳本語言沒什么關系。

所以我們要用另一種稍微復雜一點的方法來實現相同的事情,那就是用C 來做。

為此,正規的C 方法是實現IDocHostUIHandler接口,而且要做的事情很多。

至于為什么要實現它,請參見有關文檔。

用WM_CONTEXTMENU 或者 WM_RBUTTONDOWN來處理這個問題的思路的確是通常Windows做事情的方式。

但是問題是CHtmlCtrl窗口不是真正的輸入窗口。

窗口有很多種,只要用Spy 工具看一下我們的例子程序就知道在你眼前會出現多少種窗口。

如圖二所示,在實際的輸入窗口上,瀏覽器窗口有三級父/子窗口。

  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();  };  這個類重載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)定制它!否則后果不堪設想。

版權聲明:本文由 騰元冬 整理編輯。

原標題:上下文菜單是什么意思,安卓上下文菜單

轉載注明出處:http://www.dn9ww09s.icu/assemble/12619.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • icloud鑰匙串打開不了,打開icloud鑰匙串

    icloud鑰匙串打開不了,打開icloud鑰匙串 相關圖片icloud鑰匙串要不要開啟現在你需要一個密碼才能登錄到每個平臺,以確保你的賬戶安全,但是密碼很簡單,賬戶不安全,密碼復雜且難以記住,所以icloud密鑰鏈可以使用什么是icloud密鑰...

  • 接口文檔怎么用,什么是接口文檔

    接口文檔怎么用,什么是接口文檔 相關圖片接口文檔示例問題:在使用活動輔助功能SDK的過程中,我從窗口的句柄獲取ihtmldocument2指針。有沒有辦法從ihtmldocument2指針獲取iwebbrowse開發接口文檔...

  • win10最流暢的版本,win10哪個版本打游戲好

    win10最流暢的版本,win10哪個版本打游戲好 相關圖片win10企業g版好用嗎win10有四個版本,包括家庭版、專業版、企業版和教育版。有些用戶不知道在專業版和企業版之間選擇哪一個。讓我們看看win10企業版和專業版企業版的區別vs企業版與...

  • 框架的HTML標簽是,框架的HTML標簽是什么

    框架的HTML標簽是,框架的HTML標簽是什么 相關圖片內聯框架的html標簽是【框架基本概念】首先,讓我們來看看右邊的圖片。我用這張照片來解釋。這樣,可能會更清楚,好嗎!我們可以看到右邊的窗口被分成三個框架:1、2和3。每個幀...

  • 家長幫App,家長app

    家長幫App,家長app 相關圖片家長幫app下載近年來,孩子們頻繁、大規模地使用父母的手機進行游戲和直播消費的現象越來越普遍。蘋果也因為這種情況引入了家長控制功能。其中之一就是利用iPhone的家長控制功能...

  • T卡,T?1

    T卡,T?1 相關圖片6T對于加拿大,他們將于10月29日在美國發布一加6T手機。作為今年小龍845陣營的又一旗艦,其關注度不低。你最希望升級哪一個?現在有國外的電子商務平臺T 0...

  • 進階之路,進階之路什么意思

    進階之路,進階之路什么意思 相關圖片強者之路進階材料今天的面試設計師@LBE小生,畢業于江南大學,是最早的移動交互設計師之一。畢業后,他從互動設計師升為百度高級設計師、愛奇藝高級設計經理,現為LBE安全大師產...

  • Windows資源管理器停止工作,win7資源管理器老是停止工作

    Windows資源管理器停止工作,win7資源管理器老是停止工作 相關圖片win7右鍵資源管理器停止工作Windows資源管理器已停止工作,這是許多計算機用戶經常遇到的計算機問題之一。當他們遇到這個問題時,一些用戶不知道如何根據微軟官方的答案,windows資...

  • 怎么收集信息,信息收集

    怎么收集信息,信息收集 相關圖片搜集信息的渠道有哪些今天,雖然這篇文章是一篇老文章,但它的實用價值仍然很高。尤其是那些沒有良好組織習慣的學生,這篇文章一定會讓你大開眼界!作者是阿里巴巴的高級交互...

  • 現在蘋果6s換電池多少錢,蘋果保修期換電池多少錢

    現在蘋果6s換電池多少錢,蘋果保修期換電池多少錢 相關圖片蘋果電池壽命80%要換嗎很多人在手機上選擇蘋果,蘋果系統封閉穩定,性能也不錯。很多用戶可以從一個蘋果開始很長一段時間,通常手機還在使用,但電池不夠用。而且一直有一種說...

熱評文章

  • steam錯誤代碼-100解決,steam錯誤代碼-21解決

    steam錯誤代碼-100解決,steam錯誤代碼-21解決 相關圖片steam錯誤代碼137很多人通過steam游戲平臺購買和下載國外游戲,但一些用戶在連接steam時出現錯誤代碼103。如何解決steam的103錯誤碼?一。打開蒸汽設定界面,選擇steam老是錯誤代碼,怎么回...

  • 設計師用APP,設計師經常看的app

    設計師用APP,設計師經常看的app 相關圖片設計師交流的app工欲善其事,必先利其器。今天,我們將為我們的設計師提供24款精選軟件。我們推薦來自大公司、捷步達康、ustwo、okfocus等團隊的頂尖設計師,看看他們通常使設計師必...

  • 努比亞X,努比亞X2

    努比亞X,努比亞X2 相關圖片努比亞root努比亞新旗艦車型努比亞x于10月31日正式上市。與其他全屏幕旗艦機型相比,努比亞X采用了不同的方案,即目前手機市場上有很多全面的屏幕實現方案,從劉海屏幕到升降式努...

  • Touch是什么意思,Touch

    Touch是什么意思,Touch 相關圖片蘋果touch是什么意思Force touch是3D touch的前身,是蘋果的一種觸摸傳感技術。它用于蘋果手表、新款MacBook和新款MacBook Pro。用戶使用武力touch是什么手機...

  • 智能多焦點老花眼鏡,智能

    智能多焦點老花眼鏡,智能 相關圖片今日網絡熱點作為一個新興產業,智能電視行業的用戶體驗知識匱乏。今天,請您與@Bu carrot 1992分享一些電視用戶體驗的實用設計經驗和基礎知識,他負責智能電視應用程序文件分享...

  • steam錯誤代碼-100解決,steam錯誤代碼-21解決

    steam錯誤代碼-100解決,steam錯誤代碼-21解決 相關圖片steam錯誤代碼137當你玩一些國外的游戲時,你通常需要使用游戲平臺steam。雖然國內使用不是很強大,但游戲資源相當豐富。可能是因為steam的服務器在國外,所以當用戶使用steasteam老是...

  • vbhtml,vb6解析html

    vbhtml,vb6解析html 相關圖片打開vbPrivate Sub Command1_Click()WebBrowser1.導航http://localhost/Timer1.Enabled=TrueEnvb net...

  • win7系統不兼容怎么辦,文件與windows7不兼容

    win7系統不兼容怎么辦,文件與windows7不兼容 相關圖片軟件與電腦系統不兼容當一些用戶安裝軟件或游戲時,他們將收到一條錯誤消息,說明此文件的版本與正在運行的Windows不兼容。在這種情況下,壓縮文件不兼容,或者安裝軟件不兼容。...

  • 壓縮袋怎么用,好用的壓縮解壓軟件

    壓縮袋怎么用,好用的壓縮解壓軟件 相關圖片壓縮面怎樣使用我不知道你是否用過苗條女孩。它特別用于壓縮HTML超文本文件和腳本文件。據說它的壓縮率已達到15%以上。我試過了。有些文件(大文件)的壓縮率實際上是50%。我比壓...

  • win10屏幕自定義分辨率,win10強制分辨率

    win10屏幕自定義分辨率,win10強制分辨率 相關圖片win10分辨率調不了如果您是win10用戶,當您發現桌面上的圖標太大或太小,或者桌面不夠清晰時,我們需要設置分辨率。如何設置win10分辨率?未知用戶可以一起了解win10 如何調整分辨率...

關注微信

变脸官网查询