Требутся отслеживать измения текста в контроле 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 не отлавливается. Как быть?
Здравствуйте, Аноним, Вы писали:
А>Требутся отслеживать измения текста в контроле 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 не отлавливается. Как быть?
Как-то так
Здравствуйте, 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>Как-то так
Лучше так
Здравствуйте, 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>Как-то так
Спасибо большое!!!!