簡體   English   中英

如何用我自己的文件打開對話框替換默認的右鍵單擊上下文菜單

[英]How do I replace the default right click context menu in a file open dialog box with my own

我想創建一個自定義文件打開對話框,我可以在其中用我自己的上下文菜單替換用戶右鍵單擊列表中的一個文件時顯示的默認上下文菜單選項。

基於諸如this one和this之類的文章,我嘗試添加:

UINT CALLBACK OfnHookProc(HWND hDlg, UINT uMsg, UINT wParam, LONG lParam)

然后使用

ofn.lpfnHook = OfnHookProc;

我想理想的解決方案是從OPENFILENAME派生的類。 不確定如何。

對於資源管理器樣式的打開對話框

  • 默認模板不可修改
  • 掛鈎過程不會接收用於對話框中標准控件的消息

因此,通過編輯或子類化打開的對話框本身來替換默認上下文菜單的可能性似乎很小。

從用戶的角度來看,通用對話框的主要好處是其從應用程序到應用程序的一致外觀和功能。 隱藏原始控件或以其他方式更改原始控件的預期功能是不太合適的自定義。

但是,有一種解決方法可能會有所幫助:

將您的上下文菜單項添加到默認項作為附加項。 像這樣:

在此處輸入圖片說明

有關更多詳細信息,請參閱“ 使用 ExtendedSubCommandsKey 注冊表項創建級聯菜單”。

注意:修改注冊表將影響所有應用程序,而不僅僅是您自己的應用程序。 因此,請確保將此修改保留在所需的小型范圍內。 例如,如果將此更改放在HKEY_CURRENT_USER\\Software\\Classes就足夠了,請不要將其放在HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes

正如@remy-lebeau 所提到的,您可以使用窗口子類化來做到這一點,如下所示:

  1. 獲取文件打開對話框的 hWnd
  2. 通過 SetWindowLong(hWnd, GWL_WNDPROC, ..) 替換 WndProc
  3. 之后,您將能夠跟蹤鼠標位置並處理 WM_RBUTTONDOWN

要獲取窗口句柄,您可以使用 FindWindowEx、EnumWindows 甚至 SetWindowsHookEx。 不要忘記將未處理的消息傳遞給原始窗口過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM