在MFC中禁用加速器表项

时间:2010-09-22 19:35:56

标签: c++ mfc

当输入焦点位于CEdit字段上时,我需要暂时禁用加速器表中的一些项目。

我的应用程序有一些与键盘键(A,S,D等)相关的命令,我需要在用户输入字段时禁用它们。

2 个答案:

答案 0 :(得分:6)

您可以尝试CopyAcceleratorTable获取ACCEL结构的ARRAY,然后编辑出您不想要的结果,在当前表上调用DEstroyAcceleratorTable。然后使用CreateAcceleratorTable创建包含已编辑加速器表的新表。

修改:This链接可能很有用。

答案 1 :(得分:1)

Goz的回答非常好。为了节省所有其他人的时间,这里是示例代码,遵循他的建议:

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