我有这个代码:
BOOL CChristianLifeMinistryStudentMaterialDlg::PreTranslateMessage(MSG* pMsg)
{
BOOL bNoDispatch, bDealtWith;
bDealtWith = FALSE;
if (IsCTRLpressed() &&
pMsg->message == WM_KEYDOWN && pMsg->wParam == _TINT(_T('I')))
{
if (EncodeText(pMsg->hwnd, _T("i")))
{
// Eat it.
bNoDispatch = TRUE;
bDealtWith = TRUE;
}
}
else if (IsCTRLpressed() &&
pMsg->message == WM_KEYDOWN && pMsg->wParam == _TINT(_T('B')))
{
if (EncodeText(pMsg->hwnd, _T("b")))
{
// Eat it.
bNoDispatch = TRUE;
bDealtWith = TRUE;
}
}
if (!bDealtWith)
bNoDispatch = CDialogEx::PreTranslateMessage(pMsg);
return bNoDispatch;
}
最初,我CEdit
的对话框中有 3 个控件。当您使用此键按下时,它会对编辑控件中的选择执行上述操作。
我将控件从 更改CEdit
为CComboBox
。它们是可编辑类型。我调整EncodeText
为使用GetEditSel
and SetEditSel
。
现在唯一的问题是当我在组合框中编辑文本时。我选择了一些文本并按 CTRL + I 并没有任何反应。我的对话的 PTM 没有被拦截。
视觉示例
在此CEdit
控件中,我可以选择文本:
然后我使用其中一个热键,例如:CTRL + B,它仍然有效:
但是,当我在可编辑中选择一些文本CComboBox
并使用相同的热键时:
在这种情况下,它不起作用。
我假设这是因为从技术上讲,我在组合的嵌入式“编辑”控件中。既然我在组合中使用选定的文本,我如何仍然检测热键?