2010-09-22 3 views
6

Je dois temporairement désactiver quelques éléments d'une table d'accélération lorsque le focus d'entrée est sur un champ CEdit.Désactiver les éléments de la table d'accélération dans MFC

Mon application a quelques commandes associées aux touches du clavier (A, S, D, etc.) et je dois les désactiver pendant que l'utilisateur saisit du texte dans le champ.

Répondre

6

Vous pouvez essayer CopyAcceleratorTable pour obtenir les structures ARRAY de ACCEL puis éditer celles que vous ne voulez pas, appelez DEstroyAcceleratorTable sur la table actuelle. Ensuite, utilisez CreateAcceleratorTable pour créer la nouvelle table avec la table d'accélération modifiée.

Modifier: This lien peut être utile.

+1

J'ai utilisé cette méthode et cela a bien fonctionné. Juste une courte note sur la façon d'obtenir le bon HACCEL dans une classe MFC CFrameWnd (dérivée): this-> m_hAccelTable ; Pour obtenir une utilisation HACCEL arbitraire: LoadAccelerators (AfxGetInstanceHandle(), MAKEINTRESOURCE (YOUR_RESOURCE_ID)); –

1

La réponse de Goz fonctionne très bien. Pour enregistrer tous les autres utilisateurs, voici un exemple de code qui suit sa suggestion:

// 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

Si vous ne pouvez pas obtenir l'ID de ressource, vous pouvez obtenir le handle en utilisant HACCEL hAccelOld = ((CFrameWnd *) (AfxGetApp() -> m_pMainWnd)) -> m_hAccelTable; – cbuchart

Questions connexes