Non, vous ne pouvez pas vraiment faire ce que vous demandez, mais vous ne probablement pas à. (Certains détails de votre problème peuvent être en ordre.) Lorsque vous créez un mappage de message, vous spécifiez à la fois la classe à laquelle il s'applique et la classe de base pour cette classe. Si votre classe dérivée n'a pas une entrée de mappe de message pour un message particulier, MFC vérifie la mappe de message pour la classe de base. Si la table des messages de la classe de base n'a pas d'entrée, elle vérifie la table des messages pour sa classe de base, et ainsi de suite. Par exemple, supposons que vous ayez un tas de boîtes de dialogue avec des fonctionnalités communes. Vous pouvez exposer vos classes ainsi:
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()
de même pour toutes les autres classes basées HWND, comme CWnd, CView, CFrame, et ainsi de suite. Si vous traitez spécifiquement des messages de commande, vous avez des options supplémentaires.
Merci; override PreTranslateMessage() était exactement la solution dont j'avais besoin. – Geoff
Voulez-vous dire PreTranslateMessage? D'après le commentaire de Geoff, il semble que vous l'ayez fait. AFAIK PreProcessMessage est dotnet. PreTranslateMessage est une fonction MFC. Je pense qu'il sera utile d'éditer la réponse pour éviter toute confusion. –
Merci! Modifier fait. –