2010-09-22 10 views
6

Devo disattivare temporaneamente alcuni elementi da una tabella di accelerazione quando lo stato attivo di input si trova in un campo CEdit.Disabilitare gli elementi della tabella di accelerazione in MFC

La mia applicazione ha alcuni comandi associati ai tasti della tastiera (A, S, D, ecc.) E ho bisogno di disabilitare quelli mentre l'utente sta inserendo del testo nel campo.

risposta

6

Si potrebbe provare CopyAcceleratorTable per ottenere l'ARRAY delle strutture ACCEL, quindi modificare quelli che non si desidera, Chiama DEstroyAcceleratorTable sulla tabella corrente. Quindi utilizzare CreateAcceleratorTable per creare la nuova tabella con la tabella acceleratore modificata.

Modifica: This collegamento può essere utile.

+1

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)); –

1

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; 
+0

Se non è possibile ottenere l'ID risorsa, è possibile ottenere l'handle utilizzando HACCEL hAccelOld = ((CFrameWnd *) (AfxGetApp() -> m_pMainWnd)) -> m_hAccelTable; – cbuchart

Problemi correlati