C++ nastavení hodnoty ve třídě
Už opravdu nevím.
Možná nějaká blbost jinak nechápu.
Uvažujme třídu showFull
ta je odvozena od wxDialog
class showFull : public wxDialog
{
private:
DECLARE_EVENT_TABLE();
public:
int i_sirkaOkna; // o tuto proměnnou se mi jedná
int i_vyskaOkna; // -||-
...
...
}
Nyní jsem v jiné funkci, jiné třídy (možná to nenazývám úplně správně).
Zjednodušeně - v této funkci se bude volat dialog, který bude vytvořen z rodičovského okna (framu).
A já potřebuji v tom rodičovském okně, které dialog vytváří změnit parametry (konkrétně velikost) toho dialogu co se následně zobrazí:
void hlavniOkno::StartSlideShow(wxCommandEvent& event)
{
if(currentFile.FileExists()) // tohohle si nevšímejte
{
showFull dlg(this); // odvození okno od ....
dlg.i_sirkaOkna = 1270; // Takhle nastavím safra sirku !!!!
dlg.i_vyskaOkna = 980; // Takhle nastavím safra vysku !!!!
dlg.ShowModal(); // Tohle ten dialog pouze zobrazí
Problém je ovšem v tom, že překladač nehází žádnou chybu ani podobně,
ale když si uvnitř dialogu nechám vypsat hodnoty i_sirkaOkna a i_vyskaOkna :
wxMessageBox(wxT(wxString::Format("%d",i_sirkaOkna)));
// výsledek:
2292416
wxMessageBox(wxT(wxString::Format("%d",i_vyskaOkna)));
// výsledek
13761136
Jednoduchá otázka:
Jsem hňup já nebo Widgets a proč ?!
Kde presne mas to vypisovanie? Napada ma jedine moznost ze nejaka fcia typu "initdialog" sa zavola uz z konstruktora, t.j. ak si to davas vypisat v tej fcii tak je to este nenastavene.
Najlepsie pouzit debugger a uvidis to sam.
P.S. riesenie je nadefinovat si konstruktor s viac parametrami a nastavit to rovno v konstruktore, pred volanim parent konstruktora (neviem teraz zhlavy ci sa konstruktor parent triedy vola automaticky alebo ho musis zavolat v konstruktore svojej triedy, uz som OOP nejaky rok nevidel)...
P.S.2. alebo poslat oknu message na zmenu velkosti (urcite je na to fcia aj v tom widgets) a nerobit to cez premenne... (to je slusne riesenie)...
Máš pravdu !!!
dal jsem to do funkce:
void showFull::CreateGUIControls()
jak název napovidá je funkce ve které se definují prvky, které ten dialog (co se "začíná" zobrazovat) bude obsahovat.
Když to dám někam do funkce, která "běží" po vytvoření dialogu tak to fachá OK.
Jenže problém je vlastně v tom, že když potřebuji nastavit velikost toho okna tak to musím nastavovat už tady....
....
Nějaký nápad ?
Napady som ti napisal dve (v P.S., po uprave prispevku takze asi si ich este necital )
Este treti je ze ak to ma byt fullscreen tak si rovno zisti velkost screenu a nepotrebujes ziadne premenne.
Sakra ! No jo !
Du na to.....
PS: Ty PS-ka jsi tam připsal až v době kdy jsem odpovidal...