проблема с посылкой Event-ов Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
SamSam
Earned a small fee
Earned a small fee
Posts: 12
Joined: Wed Aug 06, 2008 7:53 am

проблема с посылкой Event-ов

Post by SamSam » Wed Aug 06, 2008 7:58 am

Есть такая проблема - нужно сэмулировать выбор элемента на на wxListCtrl. Понимаю что нужно послать сообщение. Но не получается. какие именно сообщения нужно послать элементу и с какими параметрами?

User avatar
T-Rex
Moderator
Moderator
Posts: 1195
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Aug 06, 2008 9:17 am

Code: Select all

wxListEvent evt(wxEVT_LIST_ITEM_SELECTED, myListCtrlID);
MySuperFrame->AddPendingEvent(evt);

SamSam
Earned a small fee
Earned a small fee
Posts: 12
Joined: Wed Aug 06, 2008 7:53 am

Post by SamSam » Wed Aug 06, 2008 9:29 am

T-Rex wrote:

Code: Select all

wxListEvent evt(wxEVT_LIST_ITEM_SELECTED, myListCtrlID);
MySuperFrame->AddPendingEvent(evt);
Уточняю нужно сэмулировать выбор конкретного элемента)))
Т.е. сделать выбор эмулируя, ну вроде как нажатие кнопки мыши и. т. д.

User avatar
T-Rex
Moderator
Moderator
Posts: 1195
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Aug 06, 2008 9:56 am

Ну так смотри, у wxListEvent есть метод

Code: Select all

wxListEvent::GetIndex()
он возвращает какое-то поле из объекта wxListEvent. Идешь в исходник wxListEvent и смотришь что именно он возвращает и перед вызовом

Code: Select all

AddPendgingEvent()
устанавливаешь нужное значение.
Т.е. смысл в чем, создать объект события, заполнить его как надо и просто отослать форме.

ЗЫ: а зачем тебе эмулировать-то? что ты хочешь реализовать?

SamSam
Earned a small fee
Earned a small fee
Posts: 12
Joined: Wed Aug 06, 2008 7:53 am

Post by SamSam » Wed Aug 06, 2008 10:13 am

Хочу сделать тест пользовательского интерфейса.

wxEVT_LIST_ITEM_SELECTED - такого события не нашел)))

много уже событий перебрал - но все никак...
ничего не понимаю(((

User avatar
T-Rex
Moderator
Moderator
Posts: 1195
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Aug 06, 2008 12:37 pm

Ыы.. так сразу бы и сказал что тебе GUI testing надо. Может лучше готовое решение поюзать?
http://swwxguitesting.wefi.net/

User avatar
T-Rex
Moderator
Moderator
Posts: 1195
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Aug 06, 2008 12:43 pm

wx/listbase.h
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)
я там похоже с идентификатором в начальнос посте протупил. :)

SamSam
Earned a small fee
Earned a small fee
Posts: 12
Joined: Wed Aug 06, 2008 7:53 am

Post by SamSam » Wed Aug 06, 2008 12:49 pm

Готовое решение видел. оригинальный способ однако...
// 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, но без разницы. сначала устанавливаем выделение - потом команду посылаем :lol:
если б мне просто выделение нужно было установить - я б так не заморачивался)))

вот бы как нажатие сэмулировать в нужной точке. wxEVT_LEFT_DOWN и wxEVT_LEFT_UP пробовал. может что не так делаю - но не работает

User avatar
T-Rex
Moderator
Moderator
Posts: 1195
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Aug 06, 2008 1:03 pm

Мм.. так а wxMouseEvent списку пробовал слать с заданными координатами?
вобще мне чего-то кажется что Auto-It (или AutoIT) + Spy++ как-то удобнее для этих целей.

SamSam
Earned a small fee
Earned a small fee
Posts: 12
Joined: Wed Aug 06, 2008 7:53 am

Post by SamSam » Wed Aug 06, 2008 1:09 pm

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++ как-то удобнее для этих целей.
надо как бы автоматические тесты...

Post Reply