いいえ、あなたは本当にあなたが求めているものを行うことはできませんが、あなたはおそらくする必要はありません。メッセージマップを作成するときは、適用するクラスとそのクラスの基本クラスの両方を指定します。派生クラスに特定のメッセージのメッセージマップエントリがない場合、MFCはメッセージマップで基本クラスをチェックします。基本クラスのメッセージマップにエントリがない場合は、その基本クラスのメッセージマップをチェックします。
たとえば、一般的な機能を備えた一連のダイアログがあるとします。あなたはthuslyあなたのクラスをレイアウトできます。
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()
同じようなのCWnd、CViewの、CFRAMEなど他のすべてのHWNDベースのクラスに適用され、というように。コマンドメッセージを扱っているなら、いくつかの追加オプションがあります。
ありがとうございます。 PreTranslateMessage()をオーバーライドすることは、まさに私が必要とした解決策でした。 – Geoff
PreTranslateMessageを意味しましたか? Geoffのコメントからあなたはそうだったようです。 AFAIK PreProcessMessageはdotnetです。 PreTranslateMessageはMFC関数です。私は、混乱を避けるために答えを編集することが役立つと思います。 –
ありがとう!編集しました。 –