[C con Clase] Control EDIT

Steven Davidson steven en conclase.net
Vie Ago 24 19:13:03 CEST 2007


Hola David,

El pasado 2007-08-24 03:14:44, david mona palacio escribió:

dmp> Cordial saludo amigos.
dmp> amigos tengo un inconvenite con un algoritmo.
dmp> ncesito capturar un float desde el control EDIT, hasta donde tengo entendido
dmp> lo que se captura del control EDIT es un char y necesito convertirlo en un
dmp> float, eso lo hago con atoif, y esa variable float la pongo en un if para
dmp> indicar un rango de que ese numeor float sea menor que 0.5 y mayor que 0.1 y
dmp> si es asi me muestre un mensaje, pero que sino esa dentro del rango haga
dmp> otra cosa. mi problema es que cualquier numero que ingreso supuestamente
dmp> esta dentro de ese rango, por ejemplo ingreso 10 y me acepta que esta dentro
dmp> de ese rango y eso no deberia ser.
dmp> el codigo q tengo es el siguiente:
dmp> char entrada[100];
dmp> float numero;
dmp> GetWindowText(GetDlgItem(hDlg, ID_NUMERO), entrada, 10);
dmp> numero= atof(entrada);
dmp> if((numero<0,5)&&(numero>0,1))

Esto no es correcto. En C/C++, los literales de coma flotante usan un "punto decimal". Por lo tanto, la expresión anterior debería ser:

0.1 < numero&&numero < 0.5

dmp> {
dmp> MessageBox(hDlg,TEXT("funciona"),TEXT("sistemas expertos"),MB_OK );
dmp> }
dmp> else
dmp> {
dmp> PostQuitMessage(0);
dmp> }
dmp> ojala que me puedan colaborar porque soy muy nuevo en este ambiente y
dmp> realmente no entiendo que pasa.

El código está bien, pero me temo que no nos dices dónde está escrito. Esto es, depende de qué parte del procesamiento de mensajes has colocado este código. Recuerda que un control es una ventana, al fin y al cabo, y además su comportamiento es independiente de otras ventanas. Esto implica que el usuario puede manipular el control como le parezca y en cualquier momento.

Dicho esto, tendrás que colocar el código posiblemente como respuesta al mensaje de notificación 'EN_UPDATE' (antes de mostrar el texto). Este mensaje es enviado a la ventana pariente a través del mensaje 'WM_COMMAND'. Ten presente que el texto del control de edición ya ha sido modificado, pero aún no se ha mostrado por pantalla.

Otro método es creando una subclase del control de edición para imponer tu propio procedimiento de ventana que obviamente contiene tu implementación del comportamiento que quieres. En tu caso, quieres procesar el mensaje WM_CHAR para aceptar o rechazar los caracteres introducidos por el usuario. Esto es algo avanzado, por lo que no sé si quieres meterte en esto.


Espero que esto aclare las dudas.

Steven


Más información sobre la lista de distribución Cconclase