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標誌工作。因此,您可以添加新的菜單項,但無法處理命令。糟糕的微軟,非常糟糕的設計。