Отражённые сообщения в WTL
От: Yurets Земля  
Дата: 01.05.03 19:01
Оценка:
Скажите, как организовать message reflection в WTL ?

У меня есть диалог, на нём EDIT контрол. Я хочу обрабатывать сообщение WM_CTLCOLOREDIT. В MFC всё легко ... А здесь :/

Вот кусок класса контрола:


class CMyEdit : public CWindowImpl<CMyEdit, CEdit>, public COwnerDraw<CMyEdit>
{
public:
    DECLARE_WND_SUPERCLASS(NULL, CEdit::GetWndClassName())

    BEGIN_MSG_MAP(CMyEdit)
        //MESSAGE_HANDLER(OCM_CTLCOLOREDIT, OnCtlColor)
        MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColor)
    END_MSG_MAP()

    LRESULT OnCtlColor(UINT uMsg, WPARAM, LPARAM, BOOL& bHandled);

====

Вот карта сообщений в классе дилога:


    BEGIN_MSG_MAP(CMainDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
        COMMAND_ID_HANDLER(IDOK, OnOK)
        COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
        //REFLECT_NOTIFICATIONS()
        CHAIN_MSG_MAP_MEMBER(m_edit)
    END_MSG_MAP()

protected:
    CMyEdit    m_edit;

====

Если оставить всё как есть, то OnCtlColor вызывается и всё казалось бы хорошо, но.. если добавить ещё один едит-контрол, не сабкласенный, простой.. то обрабатывается и его WM_CTLCOLOREDIT

Пытался делать по-правильному — через REFLECT_NOTIFICATIONS() и MESSAGE_HANDLER(OCM_CTLCOLOREDIT,) , но сообщения(любые!) даже в карту контрола не доходят

Помогите
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.