wxWindows/g++

Tengo algunas dudas sobre wxWindows y no encuentro ningun foro por ahi donde postear, si alguien sabe de alguno o mejor aun si alguien puede ayudarme lo agradeceria.
Se trata de cambiar el sizer de un control en tiempo de ejecucion.

gracias por adelantado.

Saludos J.M.Parra
puntero_al_objeto->SetSize()??
Creo que era así, hace casi un año que no uso las wxWidgets.
Y no sé de ningún foro en español donde se hable de wxWidgets concretamente... pero puedes probar en http://www.stratos-ad.com

Un saludo!
Estaba atontado, queria hacer cosas raras.
Todo es mas sencillo de lo que creia.
Sin embargo ¿Tan poca aceptacion tienen las xwindows en castellano, que no encuentro nada?.


Bueno, de todas formas muchas gracias.
Realmente a mí también me sorprende, supongo que los españoles que trabajen con esta librería postearán en foros en inglés, pero desde luego wxWidgets son LA REHOSTIA. Facilísimas de usar, completísimas, multiplataforma, muy bien documentadas, open source y, por tanto, con posibilidad de añadir nuevos controles.
Simplemente bestial, y dentro de poco sacan la siguiente versión estable, la 2.6 (la última estable es la 2.4.2 que salió en el 2003 si no me equivoco).

Lo dicho, si hay algo más en lo que se te pueda ayudar... [beer] [beer]

Un saludoo!!
La idea es la siguiente :

Tengo un servidor de pedidos por modem en linux.

Tengo repartidos unos 25.

Tengo un programa de visualizacion y actuación en curses.

Estoy hasta el gorro de programar con las curses, por lo que quiero hacer el programilla de visualizacion en graficos.

Puedo hacerlo en VB o en Borland C++, pero hay gente en las empresas que usan linux, y me fastidia que no puedan usar el programa.

Kilix no me sirve porque los socket no trabajan con eventos (aluciné cuando me di cuenta).

por eso pense en wxwindows. Ya he hecho un programilla y lo he compilado en linux y windows con el mingw.

Me está quedando cojonudo, pero uso unas etiquetas cuyo contenido es variable, y si dejo espacio para el máximo, queda fea la pantalla. Pero he pensado que eso no es ningun problema.

Gracias por todo.

Saludos de Colibrí.
altair1 escribió:Me está quedando cojonudo, pero uso unas etiquetas cuyo contenido es variable, y si dejo espacio para el máximo, queda fea la pantalla. Pero he pensado que eso no es ningun problema.

Si para las etiquetas usas wxStaticText, por defecto, según dice la documentación, ajusta el size al texto.

Window styles

wxALIGN_LEFT  Align the text to the left 
wxALIGN_RIGHT  Align the text to the right 
wxALIGN_CENTRE  Center the text (horizontally) 
wxST_NO_AUTORESIZE  By default, the control will adjust its size to exactly fit to the size of the text when SetLabel is called. If this style flag is given, the control will not change its size (this style is especially useful with controls which also have wxALIGN_RIGHT or CENTER style because otherwise they won't make sense any longer after a call to SetLabel)
El problema lo tengo en que el contenido de la etiqueta lo conozco despues. Es decir, tengo que reservar espacio, y lo tengo
en un sizer horizontal con linea-etiqueta-linea, y entonces si reservo el contenido maximo de la etiqueta, las lineas se me quedan en nada.

Pero he pensado que en lugar de diseñar la pantalla al principio e ir rellenando las etiquetas y botones y textos.... puedo crearlas en el momento en que sé los datos.

Creo que me explico muy mal, pero bueno.

Lo que quiero intentar ahora es ver como demonios se cambia el estilo de texto en los cuadros de texto y otra cosa que pienso que es mas dificil: Como agrandar el tamaño de letra de etiquetas, botones..... cuando se agranda el tamaño de la ventana....

Tengo enorme interes en este tema, porque me siento extremadamente agusto programando en software libre, y estoy rodeado por multitud de gente desde programadores a ejecutivos, que no saben otra cosa que de windows(estoy rodeado de windows2000 servers). A ver si pueden ver algo de luz.

Gracias por escucharme.
Un saludo J.M.Parra
Pues en vez de establecer el texto al crear el control, establécelo después. Mira lo que dice la ayuda de wxWidgets acerca del control:

wxStaticText::SetLabel
virtual void SetLabel(const wxString& label)

Sets the static text label and updates the controls size to exactly fit the label unless the control has wxST_NO_AUTORESIZE flag.

Parameters

label

The new label to set. It may contain newline characters.


Como ves, actualiza el tamaño automáticamente si no le has puesto el flag de wx_ST_NO_AUTORESIZE.

Para cambiar el estilo de cualquier control, puesto que son clases derivadas de wxWindow, usa el método p_Control->SetWindowStyle (mira la documentación acerca de la clase wxWindow).

Espero haberte ayudado :P

Un saludo!!!
Precisamente leyendo esto, cree un form lleno de sizers y paneles, y cual fue mi sorpresa cuando al rellenar las etiquetas, no me escribia nada.

Probé luego con un simple sizer horizontal, la verdad es que las combinaciones son muchas, pero no llegé a lograr justo lo que quería

De todas formas voy a empezar de nuevo, porque ahora se unas cuantas cosas que antes no sabia.

Gracias
Aprovechando este hilo:

¿useis algun constructor de GUI en especial o mejor ponerse directamente a hacerlo a pelo?
He probado varios editores de GUI, pero ninguno me ha convencido. También he leído por ahí que se pueden crear desde el mismo Visual C++ creando un archivo de recursos (.rsc) como los que se usan con MFC, pero... me supuso demasiado lío y pasé XDXD
Conclusión: coloco los controles a pelo y hasta ahora no he sentido necesidad de usar algún editor (porque tampoco he hecho aplicaciones con muchos controles, pa qué mentirte [+risas] [+risas] )

Un saludo!
Como herramientas de tipo RAD:

Existe el wxdesigner y el dialogblocks que son de pago.

Yo uso el wxglade para diseñar, pero luego lo modifico a mi gusto.

El wxglade es muy (como lei por allí y me hizo gracia) espartano, pero para lo que yo quiero es suficiente.

Como GUI uso el Anjuta, tambien vale el kdevelopp.

En windows puedes usar el dev-c y borland c++(este no lo he usado, pero creo que va muy bien)

Para SAGITARIO.

Ya estoy en mi oficina y hago la prueba tonta
Etiqueta = new wxStaticText(this, -1, wxT("etiqueta"));
sizer = new wxBoxSizer(wxVERTICAL);
sizer->Add(Etiqueta, 0, wxEXPAND, 0);
Etiqueta->SetLabel("etiqueta dos");
sizer->Layout();
SetAutoLayout(true);
SetSizer(sizer);
sizer->Fit(this);
sizer->SetSizeHints(this);
Layout();

Es un frame con un sizer y una etiqueta nada mas.
El ejemplo, me crea la etiqueta, pero el frame aunque me actualiza bien la etiqueta, no me expande el espacio, es decir par ver "etiqueta dos" entero, tengo que coger el raton y hacer mas grande el frame.
Evidentemente tengo que buscar una funcion que me "refresque" el sizer o el frame.

Saludos.
Pues siento no poder ayudarte ahí porque no he usado un sizer en mi vida XDXDXD
Seguramente en la doc wiki de wxWidgets encontrarás algo útil.

Hoy mismo ha salido la snapshot 2.5.5, la próxima release será la versión 2.6 estable!!! Imprecionante! xDXD

Que ganas de que salga (porque no he probado ni una de las snapshot :P).

Un saludo!
Esperemos la 2.6 , pero mientras tanto he encontrado una soluccion perfecta para lo que queria. Supongo que habra otra mejor porque mira :
etiqueta->SetLabel("bla bla bla");
sizer->SetItemMinSize(etiqueta,etiqueta->GetAdjustedBestSize().GetWidth(),etiqueta->GetAdjustedBestSize().GetHeight());
//sizer->Fit(this); si procede

Es como decirle al sizer : !!oye mira, que te he cambiado la magnitud de la etiquetaaaa!!!!!!

De todas formas gracias por haberme prestado atencion. La verdad es que me siento muy solo con el tema este.

Saludos .
Bien bien, veo que has encontrado solución :D:D
Te importaría explicarme brevemente cuál es la función de los sizers? Cuándo actúan??
Los en RAD normales (digamoslo asi), ejemplo borland, vb..... solo puedes poner posiciones estaticas, es decir un boton aqui, un cuadro de texto allá ....... si haces mas grande o mas pequeño el form, simplemente el hueco crece o decrece, u ocultas parte de los controles.
Con los sizers, diseñas los forms , de modo que si agrandas o dereces el form, todo se achica o decrece.

El sizer basico es el wxBoxSizer que puede ser horizontal o vertical.

Creas un form (o frame o panel o dialogo...) y le pones un wxBoxSizer Horizontal(o vertical),
y los controles los vas añadiendo al sizer horizontalmente(o verticalmente), diciendole si los quieres de tamaño fijo, expandibles hacia arriba y hacia abajo........, y se van creando horizontalmente(o verticalmente).
Un Sizer puede contener otros sizers, y si el diseño es complejo, tienes un follon de sde la leche.

Los RAD de wxwidgets como el wxdesigner, o el dialogblocks e incluso el wxglade no te permiten controles estaticos.

Al principio es muy lioso, pero creo que es muy interesante, por lo que estoy trabajando con ellos. Y la verdad, ya me estoy sintiendo agusto (me costó ).

No se si me habré explicado bien,.


Saludos
Ya han sacado la versión estable 2.6.0!!! La última versión estable fue la 2.4.2 hace ya 2 o 3 años... :D

Habrá que probarla, seguro que está de puta madre :D:D

http://www.wxwidgets.org

http://www.wxwidgets.org/downld2.htm
16 respuestas