La risposta di Goz funziona molto bene. Per salvare tutte le altre persone un po 'di tempo, ecco il codice di esempio che segue il suo suggerimento:
// Allocate the accelerator buffer
HACCEL hAccelOld = LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACC_TECONTROL));
int iNumAccelerators = CopyAcceleratorTable(hAccelOld, NULL, 0);
ACCEL *pAccels = new ACCEL[iNumAccelerators];
// Copy the current table to the buffer
VERIFY(CopyAcceleratorTable(hAccelOld, pAccels, iNumAccelerators) == iNumAccelerators);
// Modify the pAccels array as required
...
// Destroy the current table resource...
VERIFY(DestroyAcceleratorTable(hAccelOld) == TRUE);
// ... create a new one, based on our modified table
m_hTerAcceleratorTable = CreateAcceleratorTable(pAccels, iNumAccelerators);
ASSERT(m_hTerAcceleratorTable != NULL);
// Cleanup
delete[] pAccels;
Ho usato questo metodo e ha funzionato bene. Solo una breve nota su come ottenere la corretta HACCEL in una classe MFC CFrameWnd (derrived): this-> m_hAccelTable ; Per ottenere un uso HACCEL arbitrario: LoadAccelerators (AfxGetInstanceHandle(), MAKEINTRESOURCE (YOUR_RESOURCE_ID)); –