Как сгенерировать ON_START_EDIT нажатием на клавиатуре

 

Прошу помочь в решении задачи. Есть торговая панель, на которой расположено несколько графических объектов типа CEdit. Нужно чтобы после окончания введения данных в один из Edit'ов и нажатия на клавишу (например, TAB) фокус переходил к следующему Edit'у.

Если кликнуть мышью на Edit, то в логе можно увидеть три строки (см.скриншот) с кодами событий 1, 4 и 1005. А после окончания ввода данных (END_EDIT) - две строки с кодами событий 3 и 1006.

Я пытаюсь привязать окончание ввода данных в один Edit к активации другого Edit'а, чтобы он перешел в состояние ON_START_EDIT.

Пробовал через EventChartCustom(INTERNAL_EVENT,ON_START_EDIT,560,175,m_name+"m_EdtLossQuanUnits"); - генерируется одна из трех необходимых строк, которые видны на скриншоте - с кодом события 1005. Как сгенерировать события с кодами 1 и 4, если события пользователя начинаются с 1000?

EventChartCustom(INTERNAL_EVENT,CHARTEVENT_OBJECT_CLICK,560,175,m_name+"m_EdtLossQuanUnits"); тоже не подходит.

Файлы:
 

Попробуйте через конструкцию с макросами, типа такого, для примера:

//+------------------------------------------------------------------+
//| Class IntegralCControlsDialog                                    |
//| Usage: main dialog of the Controls application                   |
//+------------------------------------------------------------------+
class IntegralCControlsDialog : public CAppDialog
  {
public:
   CEdit             m_edit;                       
   
public:
                     IntegralCControlsDialog(void);
                    ~IntegralCControlsDialog(void);
   //--- create
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
   //--- chart event handler
   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
  
public:
   void              OnChangeComboBox(void);
   void              OnClickButton(void);
   void              OnEndEditEdit(void);
  };
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(IntegralCControlsDialog)
ON_EVENT(ON_CHANGE,m_combo_box,OnChangeComboBox)
ON_EVENT(ON_CLICK,m_button,OnClickButton)
ON_EVENT(ON_END_EDIT,m_edit,OnEndEditEdit) - нужное событие
EVENT_MAP_END(CAppDialog)

void IntegralCControlsDialog::OnEndEditEdit(void)
  {
   тут то что происходит при срабатывании события конца редактирования поля ввода. Например, добавить метод класса, который реализует ON_START_EDIT следующего контрола
  }
IntegralCControlsDialog ExtDialog;
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
     ExtDialog.OnEvent(id,lparam,dparam,sparam);
  }
 

Генерация события не поможет. Если объект генерирует событие, это совсем не значит, что он на него реагирует.

 
Dmitry Fedoseev:

Генерация события не поможет. Если объект генерирует событие, это совсем не значит, что он на него реагирует.

а если текст в элементе поменять программно события тоже не генерируются? тогда попадос
 
Maxim Dmitrievsky:
а если текст в элементе поменять программно события тоже не генерируются? тогда попадос

Если менять программно, то можно обойтись без события, потому-что и так понятно, когда текст изменился, потому-что сам менял.

Как понял, тут надо поставить фокус другому полю ввода, чтобы ввод продолжался в него. Что-то типа метода SetFocus() нужно. 

 
Dmitry Fedoseev:

Если менять программно, то можно обойтись без события, потому-что и так понятно, когда текст изменился, потому-что сам менял.

Как понял, тут надо поставить фокус другому полю ввода, чтобы ввод продолжался в него. Что-то типа метода SetFocus() нужно. 

Да, нужно что-то типа SetFocus() или ON_START_EDIT. Однако, как выяснилось, генерации одного только ON_START_EDIT недостаточно, так как это событие с кодом 1005, а нужна связка из трех событий: с кодами 1, 4 и 1005. Или же каким-то образом сгенерировать клик мышью по эдиту. Пробовал через CHARTEVENT_OBJECT_CLICK - получается событие с кодом 1001, то есть это пользовательское событие, код которого (1) добавляется к 1000 (начало нумерации кодов пользовательских событий), а мне нужно сгенерировать событие не с кодом 1001, а именно с кодом 1.
 
Asterg:
Да, нужно что-то типа SetFocus() или ON_START_EDIT. Однако, как выяснилось, генерации одного только ON_START_EDIT недостаточно, так как это событие с кодом 1005, а нужна связка из трех событий: с кодами 1, 4 и 1005. Или же каким-то образом сгенерировать клик мышью по эдиту. Пробовал через CHARTEVENT_OBJECT_CLICK - получается событие с кодом 1001, то есть это пользовательское событие, код которого (1) добавляется к 1000 (начало нумерации кодов пользовательских событий), а мне нужно сгенерировать событие не с кодом 1001, а именно с кодом 1.

Генерация событий в терминале не поможет. Клик мышью может быть, но это делается средствами Windows API. Переместить указатель мыши, сгенерировать событие нажатия кнопки.

Только зачем оно такое нужно... нужно иметь здоровые, естественные потребности.