的編輯控件內部鍵盤熱鍵我有這樣的代碼:檢測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;
}
本來,我對我的對話框3所CEdit
控制。當你使用這個鍵時,按下它在編輯控件中的選擇上執行一個動作。
我將控件從CEdit
更改爲CComboBox
。它們是可編輯的類型。我調整了EncodeText
以使用GetEditSel
和SetEditSel
。
現在只有問題是當我編輯組合框中的文本。我選擇了一些文本並按下CTRL + I,但沒有任何反應。我的對話框的PTM沒有被攔截。
視覺例
在這種CEdit
控制,我可以選擇文本:
然後我用熱鍵之一,例如:CTRL + B,它仍然有效:
但是,當我選擇在編輯CComboBox
一些文本並使用相同的熱鍵:
在這種情況下,它不能正常工作。
我假設這是因爲技術上我是在組合的嵌入式「編輯」控件中。我現在如何檢測熱鍵現在我正在組合內使用選定的文本?
當這個工程。在新的PreTranslateMessage函數中設置斷點。當消息到達時繼續調試,並且新的PreTranslateMessage繼續路由......您應該最後進入對話框的PreTranslateMessage。當它工作時,它不能解釋爲什麼對話框中的PreTranslateMessage不起作用。 – xMRi
@xMRi我無法繼續調試,因爲它表示找不到'wincore.cpp'。 –
調試輸出中的消息?這並不重要。只要你有你的代碼的調試符號,你總是可以調試。這只是一個警告,你不能調試到Windows核心...調試是必不可少的... – xMRi