J'ai ce code:détecter raccourci clavier à l'intérieur modifier le contrôle de CComboBox
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;
}
A l'origine, j'avais 3 CEdit
contrôles sur ma boîte de dialogue. Lorsque vous avez utilisé cette touche, vous avez effectué une action comme ci-dessus sur la sélection dans les contrôles d'édition. J'ai changé les contrôles de CEdit
en CComboBox
. Ils sont type modifiable. J'ai ajusté EncodeText
pour utiliser GetEditSel
et SetEditSel
.
Seul le problème est maintenant lorsque je suis en train de modifier du texte dans la zone de liste déroulante. Je sélectionne une partie du texte et appuie sur CTRL + I et rien ne se passe. Le PTM de ma boîte de dialogue n'est pas intercepté.
visuel Exemple
Dans ce contrôle CEdit
je peux sélectionner le texte:
Puis-je utiliser une des touches de raccourci, par exemple: CTRL + B et il fonctionne encore:
Mais, lorsque je sélectionne un texte dans le CComboBox
et utiliser la même touche de raccourci modifiable:
Dans ce cas, il ne fonctionne pas. J'ai supposé que c'était parce que techniquement je suis dans un contrôle "Edit" intégré du combo. Comment puis-je encore détecter les raccourcis clavier maintenant que j'utilise du texte sélectionné dans un combo?
Lorsque cela fonctionne. Définissez un point d'arrêt dans votre nouvelle fonction PreTranslateMessage.Poursuivez le débogage lorsqu'un message arrive et que votre nouveau PreTranslateMessage continue le routage ... Vous devez enfin entrer dans le PreTranslateMessage de la boîte de dialogue. Lorsque cela fonctionne, cela n'explique pas pourquoi le PreTranslateMessage dans la boîte de dialogue ne fonctionne pas. – xMRi
@xMRi Je ne peux pas continuer le débogage car il dit que 'wincore.cpp' n'a pas été trouvé. –
Un message dans la sortie de débogage? Cela n'a pas d'importance. Vous pouvez toujours déboguer, tant que vous avez des symboles de débogage pour votre code. Ceci est juste un avertissement, que vous ne pouvez pas déboguer dans le noyau de Windows ... Le débogage est essentiel ... – xMRi