Привязка обработчиков событий к Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

Привязка обработчиков событий к

Post by SmileGobo » Mon Mar 02, 2009 7:41 am

Переопределил меню для TaskBarIcon:

Code: Select all

wxMenu *MyTaskBarIcon::CreatePopupMenu(){
    wxMenu *menu = new wxMenu;
    menu->Append(wxID_EXIT,_T("Выход"));
           menu->Connect(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MyFrame1::OnClose));
    return menu;
}
Привязал обработчик:

Code: Select all

void MyFrame1::OnClose(wxCommandEvent&){
    tray_ico->RemoveIcon();
    delete tray_ico;
    this->DB.Disconnect();
    this->~MyFrame1();
}
При его срабатывание программа вылетает с ошибкой.

Пытался использовать таблицу:

Code: Select all

EVT_MENU(wxID_EXIT,MyFrame1::OnClose)
Событие вообще не отлавливается.
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

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

Post by T-Rex » Mon Mar 02, 2009 12:05 pm

Code: Select all

this->~MyFrame1(); 
Вызывать деструктор руками? Да за такое надо убивать в детстве пока маленький, или отрубать руки по пояс.

Close() можно просто вызвать

И разве в примере, что в дистрибутиве идет, нету кода, закрывающего форму по менюшке?

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

Post by T-Rex » Mon Mar 02, 2009 12:09 pm

Из исходника примера taskbar:

Code: Select all

BEGIN_EVENT_TABLE(MyTaskBarIcon, wxTaskBarIcon)
...
    EVT_MENU(PU_EXIT,    MyTaskBarIcon::OnMenuExit)
...
END_EVENT_TABLE()

// Overridables
wxMenu *MyTaskBarIcon::CreatePopupMenu()
{
    // Try creating menus different ways
    // TODO: Probably try calling SetBitmap with some XPMs here
    wxMenu *menu = new wxMenu;
    menu->Append(PU_RESTORE, _T("&Restore TBTest"));
    menu->AppendSeparator();
    menu->Append(PU_OLD_ICON, _T("&Restore Old Icon"));    
    menu->Append(PU_NEW_ICON, _T("&Set New Icon"));
    menu->AppendSeparator();
    menu->Append(PU_CHECKMARK, _T("Checkmark"),wxT(""), wxITEM_CHECK);
    menu->AppendSeparator();
    wxMenu *submenu = new wxMenu;
    submenu->Append(PU_SUB1, _T("One submenu"));
    submenu->AppendSeparator();
    submenu->Append(PU_SUB2, _T("Another submenu"));
    menu->Append(PU_SUBMAIN, _T("Submenu"), submenu);
#ifndef __WXMAC_OSX__ /*Mac has built-in quit menu*/
    menu->AppendSeparator();
    menu->Append(PU_EXIT,    _T("E&xit"));
#endif
    return menu;
}

void MyTaskBarIcon::OnMenuExit(wxCommandEvent& )
{
    dialog->Close(true);
}

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

Post by SmileGobo » Mon Mar 02, 2009 12:31 pm

Спасибо, помогло. За деструктор: виноват исправлюсь.
Вопрос как лучше привязывать события?
Честно говоря напрягает каждый раз переписывать некоторые классы и переобъявлять свои, особенно, если это не нужно. Да и путаница с именами возникает на мой взгляд не нужная.
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

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

Post by T-Rex » Mon Mar 02, 2009 1:25 pm

Вопрос как лучше привязывать события?
Через Event Table как раз нормальный способ.

Post Reply