rlm@1: #include "stdafx.h" rlm@1: #include rlm@1: #include "resource.h" rlm@1: #include "AcceleratorManager.h" rlm@1: rlm@1: #ifndef CMapStringToWord rlm@1: typedef CMap< CString, LPCSTR, WORD, WORD & > CMapStringToWord; rlm@1: #endif rlm@1: rlm@1: static CMapStringToWord winAccelStrings; rlm@1: static bool initialized = false; rlm@1: rlm@1: struct rlm@1: { rlm@1: const char *command; rlm@1: WORD id; rlm@1: } winAccelCommands[] = { rlm@1: { "Minimize", ID_SYSTEM_MINIMIZE }, rlm@1: { "Maximize", ID_SYSTEM_MAXIMIZE }, rlm@1: }; rlm@1: rlm@1: void winAccelAddCommandsFromTable(CAcceleratorManager &mgr) rlm@1: { rlm@1: int count = sizeof(winAccelCommands)/sizeof(winAccelCommands[0]); rlm@1: rlm@1: for (int i = 0; i < count; i++) rlm@1: { rlm@1: if (!mgr.AddCommandAccel(winAccelCommands[i].id, winAccelCommands[i].command, false)) rlm@1: mgr.CreateEntry(winAccelCommands[i].id, winAccelCommands[i].command); rlm@1: } rlm@1: } rlm@1: rlm@1: // recursive calls rlm@1: void winAccelAddCommandsFromMenu(CAcceleratorManager &mgr, CMenu *pMenu, const CString &parentStr) rlm@1: { rlm@1: UINT nIndexMax = pMenu->GetMenuItemCount(); rlm@1: for (UINT nIndex = 0; nIndex < nIndexMax; ++nIndex) rlm@1: { rlm@1: UINT nID = pMenu->GetMenuItemID(nIndex); rlm@1: if (nID == 0) rlm@1: continue; // menu separator or invalid cmd - ignore it rlm@1: rlm@1: if (nID == (UINT)-1) rlm@1: { rlm@1: // possibly a submenu rlm@1: CMenu *pSubMenu = pMenu->GetSubMenu(nIndex); rlm@1: if (pSubMenu != NULL) rlm@1: { rlm@1: CString tempStr; rlm@1: pMenu->GetMenuString(nIndex, tempStr, MF_BYPOSITION); rlm@1: tempStr.Remove('&'); rlm@1: winAccelAddCommandsFromMenu(mgr, pSubMenu, parentStr + '\\' + tempStr); rlm@1: } rlm@1: } rlm@1: else rlm@1: { rlm@1: // normal menu item rlm@1: // generate the strings rlm@1: CString command; rlm@1: pMenu->GetMenuString(nIndex, command, MF_BYPOSITION); rlm@1: int nPos = command.ReverseFind('\t'); rlm@1: if (nPos != -1) rlm@1: { rlm@1: command.Delete(nPos, command.GetLength() - nPos); rlm@1: } rlm@1: command.Remove('&'); rlm@1: command = parentStr + '\\' + command; rlm@1: if (!mgr.AddCommandAccel(nID, command, false)) rlm@1: { rlm@1: mgr.CreateEntry(nID, command); rlm@1: } rlm@1: } rlm@1: } rlm@1: } rlm@1: