Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197

    [c++ wxWidgets] if che non mi funziona

    non riesco a capire perche premendo il tasto OK di una MessageDialog non mi entra in un blocco if

    codice:
    wxMessageDialog * messaggino = new wxMessageDialog(this,"Sei sicuro?","Alessio",wxYES | wxCANCEL);
    
    
        if(messaggino->ShowModal() == wxID_OK)
        {
            wxMessageDialog * ciccio = new wxMessageDialog(this,"ci sei riuscito","Alessioxxx",wxYES);
            ciccio->ShowModal();
    
        }

    posto tutto il codice per completezza
    ecco il file header "basic.h"
    codice:
    
    //dichiarazione della classe application
    //sarà il punto di partenza della applicazione
    //alla chiamata onInit verra istanzato la classe frame
    class BasicApplication : public wxApp
    {
        public:
    
        virtual bool OnInit();
    };
    
    //dichiarazione della classe frame
    class BasicFrame : public wxFrame
    {
    
    
        public:
          //dichieto costruttore e distruttore
          BasicFrame(const wxChar *titolo, int xpos, int ypos, int width, int height);
          ~BasicFrame();
    
        wxTextCtrl *myDisplay;
    
    
        void wxID_OK_onClick(wxCommandEvent &event);
    
        DECLARE_EVENT_TABLE()
    
    };
    ed ecco il file di implementazione "basic.cpp" (la parte incriminata sta alla fine)
    codice:
    #include <wx/wx.h>
    #include "basic.h"
    
    
    
    //macro che chiama internamente il metodo MAIN
    IMPLEMENT_APP(BasicApplication)
    
    
    //quelsta è la prima chiamata utile che viene invocata
    //qui inizializzo le mie form(frame)
    bool BasicApplication::OnInit()
    {
    
    
        BasicFrame *MiaFinestra = new BasicFrame("alessio",50,50,400,200);
        MiaFinestra->Show(TRUE);
        SetTopWindow(MiaFinestra);
        return TRUE;
    }
    
    
    /////////////////////////////////////////////////////////////////
    /////////implementazione dei metodi della classe frame//////////
    //costruttore
    BasicFrame::BasicFrame(const wxChar *titolo,
                                 int xpos,int ypos,
                                 int width, int height)
                    : wxFrame((wxFrame *)NULL,
                                -1,
                                titolo,
                                wxPoint(xpos,ypos),
                                wxSize(width,height))
    
    
    {
    
      
    
    
         wxBoxSizer *top_sizer = new wxBoxSizer(wxVERTICAL);
         wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL);
    
    
        myDisplay = new wxTextCtrl(this,-1,"my text",wxDefaultPosition,wxSize(300,60),wxTE_MULTILINE);
    
         top_sizer->Add(myDisplay,
                        wxSizerFlags(1).Expand().Border(wxALL,10));
    
    
        //aggiungo due bottoni al sizer che ho dedicato a loro
        button_sizer->Add(new wxButton(this,wxID_OK,"OK"),
                            wxSizerFlags(0).Align(0).Expand().Border(wxALL,10));
    
    
        button_sizer->Add(new wxButton(this,wxID_CANCEL,"Cancella"),
                        wxSizerFlags(0).Align(0).Border(wxALL,10));
    
    
        //aggiungo il sizer dei bottoni a quello principale
        top_sizer->Add(button_sizer,0,wxALIGN_RIGHT);
        top_sizer->SetSizeHints(this);   //setta le dimensioni della finestra al minimo contenimento di tutti gli oggetti
        SetSizer(top_sizer);             //assegna il sizer principale
    
    
    }
    //distruttore
    BasicFrame::~BasicFrame()
    {
    
    }
    //implementazione tavola degli eventi
    BEGIN_EVENT_TABLE(BasicFrame,wxFrame)
        EVT_BUTTON(wxID_OK,BasicFrame::wxID_OK_onClick)
    END_EVENT_TABLE()
    
    
    
    //funzione richiamata al click del pulsante ok
    void BasicFrame::wxID_OK_onClick(wxCommandEvent &event)
    {
    
    
        wxMessageDialog * messaggino = new wxMessageDialog(this,"Sei sicuro?","Alessio",wxYES | wxCANCEL);
    
    
        if(messaggino->ShowModal() == wxID_OK)
        {
            wxMessageDialog * ciccio = new wxMessageDialog(this,"ci sei riuscito","Alessioxxx",wxYES);
            ciccio->ShowModal();
    
        }
    
    
    }

  2. #2
    codice:
    void WxDLogin::WxBOkClick(wxCommandEvent& event) {
         EndModal(wxID_OK);
    }

  3. #3
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    passandolo cosi come me l'hai suggerito mi dice:

    `EndModal' undeclared (first use this function)


    crcando nella guida dice di passargli come parametro l'id restituito dalla chiamata del metodo ShowModal, ma questo lo chiamo nell'if, allora dove dovrei metterlo sto EndModal?

    ho provato come primo comando nella funzione chiamata dall'evento click(come mi hai postato tu) ed ho provato dentro l'if ma con lo stesso risultato, come posso fare?

    mi potresti spiegare perche interromepere la modalita "modale" se questa viene terminata alla chiusura della finestra, ed è in quel momento che mi aspetto il controllo sull'if

  4. #4
    codice:
    	wxMessageDialog * messaggino = new wxMessageDialog(this,"Sei sicuro?","Alessio",wxYES | wxCANCEL);
    
    
        if(messaggino->ShowModal() == wxID_YES)
        {
            wxMessageDialog * ciccio = new wxMessageDialog(this,"ci sei riuscito","Alessioxxx",wxYES);
            ciccio->ShowModal();
    
        }
    Devi fare il confronto con wxID_YES e non wxID_OK
    Experience is what you get when you don’t get what you want

  5. #5
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    Originariamente inviato da Xaratroom

    Devi fare il confronto con wxID_YES e non wxID_OK

    Grazie mille,

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.