Изменение текста в Edit
От: Аноним  
Дата: 13.07.09 12:18
Оценка:
Требутся отслеживать измения текста в контроле Edit.
Как я понимаю надо отслеживать сообщение EN_CHANGE. Но вот незадача, непойму как его поймать.
Код такой

class ATL_NO_VTABLE CFixTextBox :
    public CComObjectRootEx<CComSingleThreadModel>,    
    public CStockPropImpl<CFixTextBox, IBindableImpl<CFixTextBox, _DFixTextBox, &IID__DFixTextBox>, &IID__DFixTextBox, &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public IPersistStreamInitImpl<CFixTextBox>,
    public IOleControlImpl<CFixTextBox>,
    public IOleObjectImpl<CFixTextBox>,
    public IOleInPlaceActiveObjectImpl<CFixTextBox>,
    public IViewObjectExImpl<CFixTextBox>,
    public IOleInPlaceObjectWindowlessImpl<CFixTextBox>,
    public ISupportErrorInfo,
    public IConnectionPointContainerImpl<CFixTextBox>,
    public IObjectWithSiteImpl<CFixTextBox>,
    public IPersistStorageImpl<CFixTextBox>,
    public IPersistPropertyBagImpl<CFixTextBox>,
    public ISpecifyPropertyPagesImpl<CFixTextBox>,
    public IQuickActivateImpl<CFixTextBox>,
#ifndef _WIN32_WCE
    public IDataObjectImpl<CFixTextBox>,
#endif
    public IProvideClassInfo2Impl<&CLSID_FixTextBox, &__uuidof(__DFixTextBoxEvents), &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public IPropertyNotifySinkCP<CFixTextBox>,
    public IObjectSafetyImpl<CFixTextBox, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
    public IPerPropertyBrowsingImpl<CFixTextBox>,
    public CComCoClass<CFixTextBox, &CLSID_FixTextBox>,
    public CComControl<CFixTextBox>,
    public CProxy__DFixTextBoxEvents<CFixTextBox>
{
CContainedWindowT<CEditT<CWindow>, CWinTraitsOR<ES_AUTOHSCROLL>>  m_ctlEdit;

// пропущено....

BEGIN_MSG_MAP(CFixTextBox)
    MESSAGE_HANDLER(WM_CREATE, OnCreate)
    MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
    MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
    MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)        
    CHAIN_MSG_MAP(CComControl<CFixTextBox>)
    //REFLECT_NOTIFICATIONS()
    DEFAULT_REFLECTION_HANDLER()
ALT_MSG_MAP(1)
    // Replace this with message map entries for superclassed Edit
    REFLECTED_NOTIFY_CODE_HANDLER(EN_CHANGE, OnEnChange)        
END_MSG_MAP()

//пропущено...

LRESULT OnEnChange(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
    MessageBox(_T("Catched")); 
    return S_OK;
}


при таком подходе сообщение EN_CHANGED не отлавливается. Как быть?
Re: Изменение текста в Edit
От: Onorin Нигерия  
Дата: 13.07.09 12:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Требутся отслеживать измения текста в контроле Edit.

А>Как я понимаю надо отслеживать сообщение EN_CHANGE. Но вот незадача, непойму как его поймать.
А>Код такой

А>
А>class ATL_NO_VTABLE CFixTextBox :
А>    public CComObjectRootEx<CComSingleThreadModel>,    
А>    public CStockPropImpl<CFixTextBox, IBindableImpl<CFixTextBox, _DFixTextBox, &IID__DFixTextBox>, &IID__DFixTextBox, &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
А>    public IPersistStreamInitImpl<CFixTextBox>,
А>    public IOleControlImpl<CFixTextBox>,
А>    public IOleObjectImpl<CFixTextBox>,
А>    public IOleInPlaceActiveObjectImpl<CFixTextBox>,
А>    public IViewObjectExImpl<CFixTextBox>,
А>    public IOleInPlaceObjectWindowlessImpl<CFixTextBox>,
А>    public ISupportErrorInfo,
А>    public IConnectionPointContainerImpl<CFixTextBox>,
А>    public IObjectWithSiteImpl<CFixTextBox>,
А>    public IPersistStorageImpl<CFixTextBox>,
А>    public IPersistPropertyBagImpl<CFixTextBox>,
А>    public ISpecifyPropertyPagesImpl<CFixTextBox>,
А>    public IQuickActivateImpl<CFixTextBox>,
А>#ifndef _WIN32_WCE
А>    public IDataObjectImpl<CFixTextBox>,
А>#endif
А>    public IProvideClassInfo2Impl<&CLSID_FixTextBox, &__uuidof(__DFixTextBoxEvents), &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
А>    public IPropertyNotifySinkCP<CFixTextBox>,
А>    public IObjectSafetyImpl<CFixTextBox, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
А>    public IPerPropertyBrowsingImpl<CFixTextBox>,
А>    public CComCoClass<CFixTextBox, &CLSID_FixTextBox>,
А>    public CComControl<CFixTextBox>,
А>    public CProxy__DFixTextBoxEvents<CFixTextBox>
А>{
А>CContainedWindowT<CEditT<CWindow>, CWinTraitsOR<ES_AUTOHSCROLL>>  m_ctlEdit;

А>// пропущено....

А>BEGIN_MSG_MAP(CFixTextBox)
А>    MESSAGE_HANDLER(WM_CREATE, OnCreate)
А>    MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
А>    MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
А>    MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)        
А>    CHAIN_MSG_MAP(CComControl<CFixTextBox>)
        COMMAND_CODE_HANDLER(EN_CHANGE, OnEnChange)
А>    //REFLECT_NOTIFICATIONS()
А>    DEFAULT_REFLECTION_HANDLER()
А>ALT_MSG_MAP(1)
А>    // Replace this with message map entries for superclassed Edit
А>    REFLECTED_NOTIFY_CODE_HANDLER(EN_CHANGE, OnEnChange)        
А>END_MSG_MAP()

А>//пропущено...

А>LRESULT OnEnChange(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
А>{
А>    MessageBox(_T("Catched")); 
А>    return S_OK;
А>}

А>


А>при таком подходе сообщение EN_CHANGED не отлавливается. Как быть?


Как-то так
Re[2]: Изменение текста в Edit
От: Onorin Нигерия  
Дата: 13.07.09 12:42
Оценка:
Здравствуйте, Onorin, Вы писали:

O>Здравствуйте, Аноним, Вы писали:


А>>Требутся отслеживать измения текста в контроле Edit.

А>>Как я понимаю надо отслеживать сообщение EN_CHANGE. Но вот незадача, непойму как его поймать.
А>>Код такой

А>>
А>>class ATL_NO_VTABLE CFixTextBox :
А>>    public CComObjectRootEx<CComSingleThreadModel>,    
А>>    public CStockPropImpl<CFixTextBox, IBindableImpl<CFixTextBox, _DFixTextBox, &IID__DFixTextBox>, &IID__DFixTextBox, &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
А>>    public IPersistStreamInitImpl<CFixTextBox>,
А>>    public IOleControlImpl<CFixTextBox>,
А>>    public IOleObjectImpl<CFixTextBox>,
А>>    public IOleInPlaceActiveObjectImpl<CFixTextBox>,
А>>    public IViewObjectExImpl<CFixTextBox>,
А>>    public IOleInPlaceObjectWindowlessImpl<CFixTextBox>,
А>>    public ISupportErrorInfo,
А>>    public IConnectionPointContainerImpl<CFixTextBox>,
А>>    public IObjectWithSiteImpl<CFixTextBox>,
А>>    public IPersistStorageImpl<CFixTextBox>,
А>>    public IPersistPropertyBagImpl<CFixTextBox>,
А>>    public ISpecifyPropertyPagesImpl<CFixTextBox>,
А>>    public IQuickActivateImpl<CFixTextBox>,
А>>#ifndef _WIN32_WCE
А>>    public IDataObjectImpl<CFixTextBox>,
А>>#endif
А>>    public IProvideClassInfo2Impl<&CLSID_FixTextBox, &__uuidof(__DFixTextBoxEvents), &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
А>>    public IPropertyNotifySinkCP<CFixTextBox>,
А>>    public IObjectSafetyImpl<CFixTextBox, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
А>>    public IPerPropertyBrowsingImpl<CFixTextBox>,
А>>    public CComCoClass<CFixTextBox, &CLSID_FixTextBox>,
А>>    public CComControl<CFixTextBox>,
А>>    public CProxy__DFixTextBoxEvents<CFixTextBox>
А>>{
А>>CContainedWindowT<CEditT<CWindow>, CWinTraitsOR<ES_AUTOHSCROLL>>  m_ctlEdit;

А>>// пропущено....

А>>BEGIN_MSG_MAP(CFixTextBox)
А>>    MESSAGE_HANDLER(WM_CREATE, OnCreate)
А>>    MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
А>>    MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
А>>    MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)        
O>      COMMAND_CODE_HANDLER(EN_CHANGE, OnEnChange)
А>>    CHAIN_MSG_MAP(CComControl<CFixTextBox>)
А>>    //REFLECT_NOTIFICATIONS()
А>>    DEFAULT_REFLECTION_HANDLER()
А>>ALT_MSG_MAP(1)
А>>    // Replace this with message map entries for superclassed Edit
А>>    REFLECTED_NOTIFY_CODE_HANDLER(EN_CHANGE, OnEnChange)        
А>>END_MSG_MAP()

А>>//пропущено...

А>>LRESULT OnEnChange(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
А>>{
А>>    MessageBox(_T("Catched")); 
А>>    return S_OK;
А>>}

А>>


А>>при таком подходе сообщение EN_CHANGED не отлавливается. Как быть?


O>Как-то так

Лучше так
Re[2]: Изменение текста в Edit
От: Аноним  
Дата: 13.07.09 12:50
Оценка:
Здравствуйте, Onorin, Вы писали:

O>Здравствуйте, Аноним, Вы писали:


А>>Требутся отслеживать измения текста в контроле Edit.

А>>Как я понимаю надо отслеживать сообщение EN_CHANGE. Но вот незадача, непойму как его поймать.
А>>Код такой

А>>
А>>class ATL_NO_VTABLE CFixTextBox :
А>>    public CComObjectRootEx<CComSingleThreadModel>,    
А>>    public CStockPropImpl<CFixTextBox, IBindableImpl<CFixTextBox, _DFixTextBox, &IID__DFixTextBox>, &IID__DFixTextBox, &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
А>>    public IPersistStreamInitImpl<CFixTextBox>,
А>>    public IOleControlImpl<CFixTextBox>,
А>>    public IOleObjectImpl<CFixTextBox>,
А>>    public IOleInPlaceActiveObjectImpl<CFixTextBox>,
А>>    public IViewObjectExImpl<CFixTextBox>,
А>>    public IOleInPlaceObjectWindowlessImpl<CFixTextBox>,
А>>    public ISupportErrorInfo,
А>>    public IConnectionPointContainerImpl<CFixTextBox>,
А>>    public IObjectWithSiteImpl<CFixTextBox>,
А>>    public IPersistStorageImpl<CFixTextBox>,
А>>    public IPersistPropertyBagImpl<CFixTextBox>,
А>>    public ISpecifyPropertyPagesImpl<CFixTextBox>,
А>>    public IQuickActivateImpl<CFixTextBox>,
А>>#ifndef _WIN32_WCE
А>>    public IDataObjectImpl<CFixTextBox>,
А>>#endif
А>>    public IProvideClassInfo2Impl<&CLSID_FixTextBox, &__uuidof(__DFixTextBoxEvents), &LIBID_FixForms, /*wMajor =*/ 1, /*wMinor =*/ 0>,
А>>    public IPropertyNotifySinkCP<CFixTextBox>,
А>>    public IObjectSafetyImpl<CFixTextBox, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
А>>    public IPerPropertyBrowsingImpl<CFixTextBox>,
А>>    public CComCoClass<CFixTextBox, &CLSID_FixTextBox>,
А>>    public CComControl<CFixTextBox>,
А>>    public CProxy__DFixTextBoxEvents<CFixTextBox>
А>>{
А>>CContainedWindowT<CEditT<CWindow>, CWinTraitsOR<ES_AUTOHSCROLL>>  m_ctlEdit;

А>>// пропущено....

А>>BEGIN_MSG_MAP(CFixTextBox)
А>>    MESSAGE_HANDLER(WM_CREATE, OnCreate)
А>>    MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
А>>    MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
А>>    MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)        
А>>    CHAIN_MSG_MAP(CComControl<CFixTextBox>)
O>        COMMAND_CODE_HANDLER(EN_CHANGE, OnEnChange)
А>>    //REFLECT_NOTIFICATIONS()
А>>    DEFAULT_REFLECTION_HANDLER()
А>>ALT_MSG_MAP(1)
А>>    // Replace this with message map entries for superclassed Edit
А>>    REFLECTED_NOTIFY_CODE_HANDLER(EN_CHANGE, OnEnChange)        
А>>END_MSG_MAP()

А>>//пропущено...

А>>LRESULT OnEnChange(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
А>>{
А>>    MessageBox(_T("Catched")); 
А>>    return S_OK;
А>>}

А>>


А>>при таком подходе сообщение EN_CHANGED не отлавливается. Как быть?


O>Как-то так


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