Die Antwort von Goz funktioniert sehr gut. Um alle anderen Menschen einige Zeit zu speichern, ist hier Beispielcode, der seinem Vorschlag folgt:
// 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;
Ich habe diese Methode verwendet und es hat gut funktioniert. Nur eine kurze Anmerkung, wie man das korrekte HACCEL in einer CFrameWnd (abgeleiteten) MFC-Klasse erhält: this-> m_hAccelTable ; Um einen beliebigen HACCEL zu erhalten, verwenden Sie: LoadAccelerators (AfxGetInstanceHandle(), MAKEINTRESOURCE (YOUR_RESOURCE_ID)); –