PDA

Visualizza la versione completa : [C++] Determinazione valore di ritorno finestra modale con wxWidgets


afrappe
24-05-2007, 13:15
non riesco a capire perche premendo il tasto OK di una MessageDialog non mi entra in un blocco if



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"




//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)


#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();

}


}

denis76
24-05-2007, 20:45
void WxDLogin::WxBOkClick(wxCommandEvent& event) {
EndModal(wxID_OK);
}

afrappe
25-05-2007, 13:26
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

Xaratroom
25-05-2007, 17:51
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

afrappe
28-05-2007, 09:33
Originariamente inviato da Xaratroom

Devi fare il confronto con wxID_YES e non wxID_OK


Grazie mille, :ciauz:

Loading