Ich habe diesen Code:innen bearbeiten Kontrolle 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;
}
Ursprünglich hatte ich 3 CEdit
Kontrollen auf meinem Dialog. Wenn Sie diese Taste gedrückt haben, haben Sie eine Aktion wie oben für die Auswahl in den Bearbeitungssteuerelementen ausgeführt.
Ich habe die Steuerelemente von CEdit
zu CComboBox
geändert. Sie sind bearbeitbarer Typ. Ich habe EncodeText
angepasst, um GetEditSel
und SetEditSel
zu verwenden.
Nur Problem ist jetzt, wenn ich Text in der Kombinationsfeld bearbeiten. Ich wähle einen Teil des Textes und drücke STRG + I und nichts passiert. Der PTM meines Dialogs wird nicht abgefangen.
Visuelles Beispiel
In dieser CEdit
Kontrolle kann ich Text auswählen:
Dann benutze ich eine des Hot-Keys, zB: CTRL + B und es funktioniert immer noch:
Aber, wenn ich wählen Sie einen Text in editierbaren CComboBox
und verwenden die gleiche Hot-Key:
In diesem Fall ist es nicht funktioniert.
Ich habe angenommen, dass es ist, weil technisch ich in einem eingebetteten "Bearbeiten" Steuerelement der Combo bin. Wie erkenne ich die Hotkeys jetzt noch, wenn ich ausgewählten Text in einem Combo verwende?
Wenn das funktioniert. Legen Sie in Ihrer neuen PreTranslateMessage-Funktion einen Haltepunkt fest.Setzen Sie das Debugging fort, wenn eine Nachricht eintrifft und Ihre neue PreTranslateMessage weiter routet ... Sie sollten schließlich in die PreTranslateMessage des Dialogfelds wechseln. Wenn dies funktioniert, wird nicht erläutert, warum die PreTranslateMessage im Dialogfeld nicht funktioniert. – xMRi
@xMRi Ich kann das Debuggen nicht fortsetzen, weil es besagt, dass 'wincore.cpp' nicht gefunden wurde. –
Eine Nachricht in der Debug-Ausgabe? Das ist egal. Sie können immer debuggen, solange Sie Debug-Symbole für Ihren Code haben. Dies ist nur eine Warnung, dass Sie nicht in den Windows-Kern debuggen können ... Debugging ist wichtig ... – xMRi