c++ - 如何用我自己的替换文件打开对话框中的默认右键单击上下文菜单
问题描述
我想创建一个自定义文件打开对话框,我可以用我自己的上下文菜单替换用户右键单击列表中的一个文件时显示的默认上下文菜单选项。
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
.
推荐阅读
- java - 所需的字符转换器不可用。错误代码=-4220,SQLSTATE=null
- ruby - 在ruby中覆盖冻结变量的方法是什么?
- appdata - 如何通过 actix-web App::data() 传递多变量
- mysql - MySQL - INSERT INTO SELECT 使用列名和值的子查询
- azure-functions - 将 Microsoft.Azure.WebJobs.Extensions.SignalRService 包添加到 Azure Function 项目会破坏我的依赖注入
- rest - 在 OAuth 重定向 URL 中有访问令牌是不是很糟糕
- flutter - Flutter 中的清洁架构和用户登录 - 如何存储用户信息?
- javascript - AWS Lambda 节点 12.X 上出现意外的令牌 s3 错误
- python-2.6 - IP地址和文件操作python 2.6
- terraform - Terraform,忽略特定的应用程序设置 azurerm