【发布时间】:2010-09-22 19:35:55
【问题描述】:
当输入焦点位于 CEdit 字段上时,我需要暂时禁用快捷键表中的一些项目。
我的应用程序有一些与键盘键(A、S、D 等)相关的命令,我需要在用户在字段中输入文本时禁用这些命令。
【问题讨论】:
当输入焦点位于 CEdit 字段上时,我需要暂时禁用快捷键表中的一些项目。
我的应用程序有一些与键盘键(A、S、D 等)相关的命令,我需要在用户在字段中输入文本时禁用这些命令。
【问题讨论】:
您可以尝试CopyAcceleratorTable 来获取 ACCEL 结构的 ARRAY,然后编辑掉您不想要的结构,在当前表上调用 DEstroyAcceleratorTable。然后使用CreateAcceleratorTable 使用已编辑的快捷键表创建新表。
编辑:This 链接可能有用。
【讨论】:
来自 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;
【讨论】: