繁体   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