проблема с посылкой Event-ов Topic is solved
проблема с посылкой Event-ов
Есть такая проблема - нужно сэмулировать выбор элемента на на wxListCtrl. Понимаю что нужно послать сообщение. Но не получается. какие именно сообщения нужно послать элементу и с какими параметрами?
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Code: Select all
wxListEvent evt(wxEVT_LIST_ITEM_SELECTED, myListCtrlID);
MySuperFrame->AddPendingEvent(evt);
Уточняю нужно сэмулировать выбор конкретного элемента)))T-Rex wrote:Code: Select all
wxListEvent evt(wxEVT_LIST_ITEM_SELECTED, myListCtrlID); MySuperFrame->AddPendingEvent(evt);
Т.е. сделать выбор эмулируя, ну вроде как нажатие кнопки мыши и. т. д.
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Ну так смотри, у wxListEvent есть метод
он возвращает какое-то поле из объекта wxListEvent. Идешь в исходник wxListEvent и смотришь что именно он возвращает и перед вызовом устанавливаешь нужное значение.
Т.е. смысл в чем, создать объект события, заполнить его как надо и просто отослать форме.
ЗЫ: а зачем тебе эмулировать-то? что ты хочешь реализовать?
Code: Select all
wxListEvent::GetIndex()
Code: Select all
AddPendgingEvent()
Т.е. смысл в чем, создать объект события, заполнить его как надо и просто отослать форме.
ЗЫ: а зачем тебе эмулировать-то? что ты хочешь реализовать?
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Ыы.. так сразу бы и сказал что тебе GUI testing надо. Может лучше готовое решение поюзать?
http://swwxguitesting.wefi.net/
http://swwxguitesting.wefi.net/
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
wx/listbase.h
line 457
я там похоже с идентификатором в начальнос посте протупил.
line 457
Code: Select all
#define wx__DECLARE_LISTEVT(evt, id, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_LIST_ ## evt, id, wxListEventHandler(fn))
...
#define EVT_LIST_ITEM_SELECTED(id, fn) wx__DECLARE_LISTEVT(ITEM_SELECTED, id, fn)
Готовое решение видел. оригинальный способ однако...
// 1. GUI control state:
radioBox->SetSelection (item);
// 2. Event:
wxCommandEvent evt (wxEVT_COMMAND_RADIOBOX_SELECTED, radioBox->GetId ());
evt.SetEventObject (radioBox);
evt.SetInt (item);
evt.SetString (radioBox->GetString (item));
::wxPostEvent (radioBox->GetEventHandler (), evt);
это для RADIOBOX, но без разницы. сначала устанавливаем выделение - потом команду посылаем
если б мне просто выделение нужно было установить - я б так не заморачивался)))
вот бы как нажатие сэмулировать в нужной точке. wxEVT_LEFT_DOWN и wxEVT_LEFT_UP пробовал. может что не так делаю - но не работает
// 1. GUI control state:
radioBox->SetSelection (item);
// 2. Event:
wxCommandEvent evt (wxEVT_COMMAND_RADIOBOX_SELECTED, radioBox->GetId ());
evt.SetEventObject (radioBox);
evt.SetInt (item);
evt.SetString (radioBox->GetString (item));
::wxPostEvent (radioBox->GetEventHandler (), evt);
это для RADIOBOX, но без разницы. сначала устанавливаем выделение - потом команду посылаем
если б мне просто выделение нужно было установить - я б так не заморачивался)))
вот бы как нажатие сэмулировать в нужной точке. wxEVT_LEFT_DOWN и wxEVT_LEFT_UP пробовал. может что не так делаю - но не работает
пробовал - может что не так делаю...T-Rex wrote:Мм.. так а wxMouseEvent списку пробовал слать с заданными координатами?
wxRect rect;
pControl->GetItemRect(1,rect);
wxMouseEvent mevent(wxEVT_LEFT_DOWN);
mevent.SetId(pControl->GetId());
mevent.m_altDown = false;
mevent.m_controlDown = false;
mevent.m_leftDown = true;
mevent.m_metaDown = false;
mevent.m_middleDown = false;
mevent.m_rightDown = false;
mevent.m_shiftDown = false;
mevent.SetTimestamp(wxDateTime::Now().GetTicks());
mevent.m_x = rect.x + 1;
mevent.m_y = y + rect.y + 1;
::wxPostEvent (pControl->GetEventHandler(), mevent);
wxMouseEvent mevent1(wxEVT_LEFT_UP);
mevent1.SetId(pControl->GetId());
mevent1.m_altDown = false;
mevent1.m_controlDown = false;
mevent1.m_leftDown = false;
mevent1.m_metaDown = false;
mevent1.m_middleDown = false;
mevent1.m_rightDown = false;
mevent1.m_shiftDown = false;
mevent1.SetTimestamp(wxDateTime::Now().GetTicks());
mevent1.m_x = rect.x + 1;
mevent1.m_y = rect.y + 1;
::wxPostEvent (pControl->GetEventHandler(), mevent1);
pControl - это wxListCtrl*
надо как бы автоматические тесты...T-Rex wrote: вобще мне чего-то кажется что Auto-It (или AutoIT) + Spy++ как-то удобнее для этих целей.