Отключить элементы таблицы ускорителей в MFC - PullRequest
6 голосов
/ 22 сентября 2010

Мне нужно временно отключить несколько элементов из таблицы ускорителей, когда фокус ввода находится в поле CEdit.

Мое приложение имеет несколько команд, связанных с клавишами клавиатуры (A, S, D и т. Д.), И мне нужно отключить их, когда пользователь вводит текст в поле.

Ответы [ 2 ]

6 голосов
/ 23 сентября 2010

Вы можете попробовать CopyAcceleratorTable , чтобы получить Массив структур ACCEL, а затем отредактировать те, которые вам не нужны, вызвать DEstroyAcceleratorTable для текущей таблицы.Затем используйте CreateAcceleratorTable , чтобы создать новую таблицу с отредактированной таблицей ускорителей.

Редактировать: Эта ссылка может быть полезной.

1 голос
/ 06 октября 2012

Ответ от Гоза работает очень хорошо.Чтобы сэкономить время другим людям, вот пример кода, который следует за его предложением:

// 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...