Исправлено форматирование текста. Удалено избыточное цитирование. — SchweinDeBurg
Здравствуйте, Sashaka, Вы писали:
S>попробуй создать свой класс list controla, унаследованный от того что у тебя есть и туда прописать этот обработчик.
Да выше верно сказанно, что у вас наверняка есть какойто елемент управления, которому и приходитя сообщения(так как на контрое установлен фокус ввода). Выходов из это ситуации много:
унаследовать класс(сказанно выше), но что если у вас там два десятка едитов, и фокус то у одного то у другого(е если диалог обширный, и элементы разные)... если же у вас только один елемент управления(к примеру listctr), то чтобы не наследовать новый класс, были придуманы нотифай сообщения, которые уведомляют родителя о событиях происходящих на дочерних елементах управления. Конкретно для листкантрола это:
BEGIN_MESSAGE_MAP(CSomeDlg, CDialog)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnLvnKeydownList1)
END_MESSAGE_MAP()
void CSomeDlg::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
*pResult = 0;
}
Как универсальный вариант, можно переопределить виртуальную функцию PreTranslateMessage у вашего диалога,она вызывается по родительской цепочьке(клас приложения/главное окно/.../родитель елемента управления/сам елемент управления), и в ней можно перехватить любое сообщение, до того как оно дойдет до адресата(елемента управления на котором установлен фокус)
BOOL CSomeDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
MessageBox("WM_KEYDOWN");
}
return CDialog::PreTranslateMessage(pMsg);
}