[solved]dynamiczne wxMenu oraz pobieranie id

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

[solved]dynamiczne wxMenu oraz pobieranie id

Post autor: maly_wariat »

Kod: Zaznacz cały

for(z=0;z<s;z=z++)
{
    submenu->Append(PU_SUB2,seriale[z]);
}
Jeśli w taki sposób tworzę submenu to w jaki sposób potem mogę pobrać id klikniętej opcji aby potem móc to dalej obrabiać?
Dodaj że od kilku dni uczę się wx i trochę bardzo się w tym gubie.
"Dopóki nie skorzystałem z internetu, nie wiedziałem że na świecie żyje tylu idiotów " - S.Lem.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: dynamiczne wxMenu oraz pobieranie id

Post autor: beluosus »

Nie znam wxWidgets i nie wiem czy poniższe rozwiązanie jest dobre aczkolwiek działa. :)

Wydaje mi się, że w Twoim kodzie ID nic Ci nie da, bo wszystkie będą takie same ( == PU_SUB2). Jeśli chcesz je rozróżnić każde musi być inne. W poniższym przykładzie masz stałą ID_UserEvent == 1000, każdemu kolejnemu itemkowi dajemy ID o jeden większy niż poprzednikowi, a zaczynamy liczyć właśnie od ID_UserEvent. Zdarzenia łączymy Connectem, a nie jakąś dziwną tablicą zdarzeń. :P

Kod: Zaznacz cały

#include "wx/wx.h"

class MyApp: public wxApp
{
    virtual bool OnInit();
};

class MyFrame: public wxFrame
{
    public:
        MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);

        void OnQuit(wxCommandEvent& event);
        void OnMyEvent(wxCommandEvent& event);
};

enum
{
    ID_Quit = 1,
    ID_UserEvent = 1000,
};

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( _("Menu items..."), wxPoint(200, 200), wxSize(400, 100) );
    frame->Show(true);
    SetTopWindow(frame);
    return true;
}

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame( NULL, -1, title, pos, size )
{
    wxMenu *menu = new wxMenu;

    for (int i = 0; i < 10; i++)
    {
        menu->Append(ID_UserEvent + i, wxString::Format(wxT("Item id: %d"), static_cast<int> (ID_UserEvent + i)));
        Connect(ID_UserEvent + i, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnMyEvent));
    }

    menu->AppendSeparator();
    menu->Append( ID_Quit, _("E&xit") );
    Connect(ID_Quit, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit));

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menu, _("&Test") );

    SetMenuBar( menuBar );
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(TRUE);
}

void MyFrame::OnMyEvent(wxCommandEvent& event)
{
    wxMessageBox(wxString::Format(wxT("Clicked id: %d"), static_cast<int> (event.GetId())), _("test"), wxOK | wxICON_INFORMATION, this);
}
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: dynamiczne wxMenu oraz pobieranie id

Post autor: maly_wariat »

Dziękuje:) działała.
"Dopóki nie skorzystałem z internetu, nie wiedziałem że na świecie żyje tylu idiotów " - S.Lem.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości