1
在windows7之前,解决方案很简单。只需添加自己的菜单并编写自己的“撤消,重做,剪切,复制,粘贴,删除,全选”菜单项。但现在不可能了,因为菜单已经变得非常复杂的Unicode和输入消息的东西。我该如何修改CEdit控件的上下文菜单?
在windows7之前,解决方案很简单。只需添加自己的菜单并编写自己的“撤消,重做,剪切,复制,粘贴,删除,全选”菜单项。但现在不可能了,因为菜单已经变得非常复杂的Unicode和输入消息的东西。我该如何修改CEdit控件的上下文菜单?
好吧,我发现怎么办呢
static bool is_first_time;
case WM_CONTEXTMENU: {
is_first_time = true;
original_window_proc(message,wparam,lparam);
break;
case WM_ENTERIDLE:
if (wparam == MSGF_MENU) {
if (is_first_time) {
is_first_time = false;
assert(!agui_text_popup_context_menu);
MENUBARINFO mbi;
memset(&mbi, 0, sizeof(MENUBARINFO));
mbi.cbSize = sizeof(MENUBARINFO);
GetMenuBarInfo((HWND)lparam, OBJID_CLIENT, 0, &mbi);
if (::IsMenu((HMENU)mbi.hMenu)) {
.... add your menu items here
}
}
}
不幸的是,这并不因为代码使用TrackPopupMenu与TPM_RETURNCMD和TPM_NONOTIFY标志工作。因此,您可以添加新的菜单项,但无法处理命令。糟糕的微软,非常糟糕的设计。