Нет, вы не можете делать то, что вы просите, но вы, вероятно, не придется. (Некоторые детали вашей проблемы могут быть в порядке.) Когда вы создаете карту сообщений, вы указываете как класс, к которому он применяется, так и базовый класс для этого класса. Если ваш производный класс не имеет записи карты сообщений для определенного сообщения, MFC проверит карту сообщений для базового класса. Если в карте сообщений базового класса нет записи, она проверит карту сообщений для своего базового класса и так далее.
Например, предположим, что у вас есть набор диалогов с общей функциональностью. Вы можете выложить свои занятия таким образом:
class CMyBaseDialog : public CDialog {
DECLARE_MESSAGE_MAP();
}
BEGIN_MESSAGE_MAP(CMyBaseDialog, CDialog)
// Handle any common messages here...
END_MESSAGE_MAP()
class CDerivedDialog : public CMyBaseDialog {
DECLARE_MESSAGE_MAP();
}
BEGIN_MESSAGE_MAP(CDerivedDialog, CMyBaseDialog)
// Handle any specific messages here...
END_MESSAGE_MAP()
То же самое относится и ко всем другим на основе HWND классов, таких как CWnd, CView, CFrame, и так далее. Если вы имеете дело с командами, то у вас есть дополнительные опции.
Thanks; переопределение PreTranslateMessage() было именно тем решением, которое мне было необходимо. – Geoff
Возможно, вы имели в виду PreTranslateMessage? Из комментария Джеффа, похоже, вы это сделали. AFAIK PreProcessMessage - это dotnet. PreTranslateMessage - это функция MFC. Я думаю, что будет полезно отредактировать ответ, чтобы избежать путаницы. –
Спасибо! Сделано редактирование. –