UniText控制元件,有完整源代碼,但是右鍵選單我一直屏蔽不了。是從這個網址下載的:
https://www.vbforums.com/showthread.php?500026-VB6-UniControls-Summer-Release-2008-06-19
(另:帖子下邊的美女圖,保存了UniText控制元件的完整源代碼,請對著圖片點右鍵,選“圖片另存為...”;將下載好的圖片檔案,改一個擴展名,如:pic.zip,即可解壓了。)
這個文本框控制元件,能在VB6中支持Unicode字符的顯示與編輯。它本身似乎有些Bug,我反復查了好幾遍源代碼,暫時也查不出原因。現在打算拿它當“一塊只讀白板”來用,不過,不想將Enabled設false,只想設Locked屏蔽所有編輯功能及屏蔽右鍵選單。
網上屏蔽右鍵選單的代碼,大多是表單級的“子類化”,然后用SetWindowLongA設定表單訊息處理函式,以屏蔽WM_CONTEXTMENU訊息。
現在這個UniText控制元件比較“高端”,感覺是用Thunk技術實作“子類化”的VB6控制元件。
我在源代碼中四處添加:
ssc_AddMsg WM_CONTEXTMENU
If (uMsg = WM_CONTEXTMENU) Then Exit Sub
好像一點用也沒有。
Thunk以自己獨特的“黑箱”方式,內部維護著一份“回呼函式”的清單,可我一直摸不透內部細節。
各位大俠,不知是否有好辦法?
或者,是否存在這樣的可能性:
讓控制元件只要一接收到WM_CONTEXTMENU訊息,就從Windows系統的訊息串列當中,直接洗掉這一條訊息,并自動跳到下一條訊息?(即,暴力洗掉一切不想要的訊息,就當它們從不曾來過這世界。呵呵。)

uj5u.com熱心網友回復:
反復閱讀UniText.ctl原始碼,在第2060行,能找到替換新訊息處理函式的代碼:z_Sc(IDX_PREVPROC) = SetWindowLongW(lng_hWnd, GWL_WNDPROC, z_ScMem + WNDPROC_OFF) 'Set the new WndProc, return the address of the original WndProc
可知,新訊息處理函式的地址是:z_ScMem + WNDPROC_OFF
而舊訊息處理函式的地址則是:z_Sc(IDX_PREVPROC)
可我實在搞不明白,這個新訊息處理函式究竟是指向具體哪一個函式名?
我打算拿來屏蔽WM_CONTEXTMENU訊息的代碼,又應該加插在哪里呢?
懇請路過的朋友,稍稍點拔一下愚笨的我。
說不定,您一言便可驚醒夢中人啊!——謝謝啦!謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/268548.html
標籤:控件
上一篇:win32 API獲取主控廠商
