首页 > 解决方案 > 如何用我自己的替换文件打开对话框中的默认右键单击上下文菜单

问题描述

我想创建一个自定义文件打开对话框,我可以用我自己的上下文菜单替换用户右键单击列表中的一个文件时显示的默认上下文菜单选项。

基于这篇文章和这篇文章我尝试添加:

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

然后使用

ofn.lpfnHook = OfnHookProc;

我想理想的解决方案将是一个派生自OPENFILENAME的类。不知道怎么做。

标签: c++winapimfcmodal-dialog

解决方案


对于资源管理器样式的打开对话框

  • 默认模板不可修改
  • 挂钩过程不接收用于对话框中标准控件的消息。

因此,通过编辑或子类化打开的对话框本身来替换默认上下文菜单的可能性似乎很小。

从用户的角度来看,通用对话框的主要好处是它在应用程序之间具有一致的外观和功能。隐藏原始控件或以其他方式 更改原始控件的预期功能是不太合适的自定义。

但是,有一种解决方法可能会有所帮助:

将您的上下文菜单项添加到默认菜单项作为附加项。像这样:

在此处输入图像描述

有关详细信息,请参阅“使用 ExtendedSubCommandsKey 注册表项创建级联菜单”。

注意:修改注册表将影响所有应用程序,而不仅仅是您自己的应用程序。因此,请确保将此修改保持在所需的迷你范围内。例如,如果放入此更改HKEY_CURRENT_USER\Software\Classes就足够了,请不要放入HKEY_LOCAL_MACHINE\SOFTWARE\Classes.


推荐阅读