如何解决如何禁用MFC编辑控件弹出菜单中的其他项?
是否有一种干净简便的方法可以从上下文弹出菜单中禁用“从右到左阅读顺序”和Unicode相关消息,以进行编辑控件。是的,我知道我可以继承并拦截WM_CONTEXTPOPUP
,然后浏览菜单。附件是带有相关菜单项的图像。
解决方法
我知道您说过您不想继承,但我不认为这很痛苦。
从CEdit
派生,在这种情况下,我使用类名CEditContextMenu
并将WM_CONTEXTMENU
添加到您的消息映射中:
EditContextMenu.cpp
// ...
BEGIN_MESSAGE_MAP(CEditContextMenu,CEdit)
ON_MESSAGE(WM_CONTEXTMENU,&CEditContextMenu::OnContextMenu)
END_MESSAGE_MAP()
// CEditContextMenu message handlers
LRESULT CEditContextMenu::OnContextMenu(WPARAM wParam,LPARAM lParam){
HWINEVENTHOOK hWinEventHook{
SetWinEventHook(EVENT_SYSTEM_MENUPOPUPSTART,EVENT_SYSTEM_MENUPOPUPSTART,NULL,[](HWINEVENTHOOK hWinEventHook,DWORD Event,HWND hWnd,LONG idObject,LONG idChild,DWORD idEventThread,DWORD dwmsEventTime){
if (idObject == OBJID_CLIENT && idChild == CHILDID_SELF){
CMenu* pMenu{
CMenu::FromHandle((HMENU)::SendMessage(
hWnd,MN_GETHMENU,NULL))
};
pMenu->EnableMenuItem(32768,MF_DISABLED);
}
},GetCurrentProcessId(),GetCurrentThreadId(),WINEVENT_OUTOFCONTEXT)
};
LRESULT ret{ Default() };
UnhookWinEvent(hWinEventHook);
return ret;
}
// ...
也许您可以做些花哨的事情,注意WS_EX_RTLREADING
并以某种方式阻止它。
最后,您想更改操作系统的底层功能。我认为没有一种有机的优雅方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。