0

私はいくつかの MFC C++ コードを維持しているだけで、多くのCEditオブジェクトを含む画面があります。

すべてのイベントを実装したいのですが、OnFocusイベントを処理するメソッドを 1 つだけ記述します。

CEditそのためには、イベントを発生させたIDを知る必要がありますが、MFC でのイベントの実装にはこれがパラメーターとして含まれていないようです(オブジェクトがパラメーターとして含まれるOnFocus他のイベントと比較して)。OnCtlColorCWnd*

CEditID をメイン メソッドに渡すたびに小さなメソッドを実装する必要があるとは信じられません。それが唯一の解決策である場合は、MFC を恥じてください。

4

1 に答える 1

3

ON_CONTROL_RANGEマクロは、単一のハンドラーを複数のコントロールの同じイベントにマッピングできるようにするために正確に存在します。

まず、コントロール ID が連続していることを確認する必要があります。次に、ヘッダーで、コントロール ID をパラメーターとして受け取るハンドラーを宣言する必要があります。

afx_msg void OnSetFocusMulti(UINT ctrlId);

これにより、必要に応じてハンドラーでセンダー コントロールを区別できます。

次に、一連のメッセージではなく、これをメッセージ マップに追加する必要がありますON_EN_SETFOCUS(IDC_EDIT1, &CMyDlg::OnSetfocus)

ON_CONTROL_RANGE(EN_SETFOCUS, IDC_EDIT1, IDC_EDIT_X, OnEnSetFocusMulti)
                      ^           ^          ^             ^
//       notification code | first ctrl | last ctrl |   the handler

その他のメッセージ マップ マクロは、ここに記載されています。

于 2013-04-09T08:11:37.753 に答える