static HMENU ChangeMenuToPopup ( gui_window *wnd, HMENU hmenu, gui_ctl_id id, hint_type type ) { HMENU popup; char name[MAX_STR]; unsigned menu_flags; unsigned attr_flags; popup = _wpi_createpopupmenu(); if( popup != (HMENU)NULL ) { _wpi_getmenutext( hmenu, id, name, MAX_STR - 1, FALSE ); GetMenuFlags( hmenu, id, false, &menu_flags, &attr_flags ); _wpi_modifymenu( hmenu, id, menu_flags | MF_POPUP, attr_flags, id, popup, name, FALSE ); GUIDrawMenuBar( wnd ); InsertPopup( wnd, id, popup, type ); } return( popup ); }
bool CRightView::OnContextMenu(CPoint point, int /*nLine*/, DiffStates state) { if (!this->IsWindowVisible()) return false; CMenu popup; if (!popup.CreatePopupMenu()) return false; #define ID_USEBLOCK 1 #define ID_USEFILE 2 #define ID_USETHEIRANDYOURBLOCK 3 #define ID_USEYOURANDTHEIRBLOCK 4 #define ID_USEBOTHTHISFIRST 5 #define ID_USEBOTHTHISLAST 6 const UINT uFlags = GetMenuFlags( state ); CString temp; if (m_pwndBottom->IsWindowVisible()) { temp.LoadString(IDS_VIEWCONTEXTMENU_USETHISBLOCK); } else temp.LoadString(IDS_VIEWCONTEXTMENU_USEOTHERBLOCK); popup.AppendMenu(uFlags, ID_USEBLOCK, temp); if (m_pwndBottom->IsWindowVisible()) { temp.LoadString(IDS_VIEWCONTEXTMENU_USETHISFILE); } else temp.LoadString(IDS_VIEWCONTEXTMENU_USEOTHERFILE); popup.AppendMenu(MF_STRING | MF_ENABLED, ID_USEFILE, temp); if (m_pwndBottom->IsWindowVisible()) { temp.LoadString(IDS_VIEWCONTEXTMENU_USEYOURANDTHEIRBLOCK); popup.AppendMenu(uFlags, ID_USEYOURANDTHEIRBLOCK, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USETHEIRANDYOURBLOCK); popup.AppendMenu(uFlags, ID_USETHEIRANDYOURBLOCK, temp); } else { temp.LoadString(IDS_VIEWCONTEXTMENU_USEBOTHTHISFIRST); popup.AppendMenu(uFlags, ID_USEBOTHTHISFIRST, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USEBOTHTHISLAST); popup.AppendMenu(uFlags, ID_USEBOTHTHISLAST, temp); } AddCutCopyAndPaste(popup); CompensateForKeyboard(point); int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0); viewstate rightstate; viewstate bottomstate; viewstate leftstate; switch (cmd) { case ID_EDIT_COPY: OnEditCopy(); return true; case ID_EDIT_CUT: OnEditCopy(); RemoveSelectedText(); return false; case ID_EDIT_PASTE: PasteText(); return false; case ID_USEFILE: UseFile(false); break; case ID_USEBLOCK: UseBlock(false); break; case ID_USEYOURANDTHEIRBLOCK: UseYourAndTheirBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USETHEIRANDYOURBLOCK: UseTheirAndYourBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USEBOTHTHISFIRST: UseBothRightFirst(rightstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USEBOTHTHISLAST: UseBothLeftFirst(rightstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; default: return false; } // switch (cmd) return false; }