使用WTL的消息反射封装CEdit实现监听控件文本改变事件

时间:2023-03-08 18:06:46

消息反射机制可以使对消息的处理都集中在控件类中,以CEdit的EN_CHANGE消息为例:

/*MyEdit.h*/

class CMyEdit:public CWindowImpl<CMyEdit, CEdit> {

    BEGIN_MSG_MAP(CMyEdit)

        REFLECTED_COMMAND_CODE_HANDLER(EN_CHANGE, OnTextChange)

        DEFAULT_REFLECTION_HANDLER()

    END_MSG_MAP()

 

    LRESULT OnTextChange(UINT code, UINT id, HWND hCtrl, BOOL &bHandled) {

        MessageBox("TextChanged");

        return 0;

    }

}

为了能让消息反射到控件,控件的父窗口的消息映射中还需要加上:
BEGIN_MSG_MAP(CxxxDlg)

    ....

    REFLECT_NOTIFICATIONS()

END_MSG_MAP()