Control edit

El control edit es una caja rectangular en la que podemos editar texto, introducir contraseñas, o pedir al usuario cualquier información que requiera nuestra aplicación, este es un control bastante completo ya que podemos hacer muchas cosas como por ejemplo permitir solo la entrada de números, permitir la entrada de texto en una sola línea o varias si lo deseamos, podemos controlar el tamaño del buffer que será usado para almacenar texto y mucho más, veamos cómo hacerlo. 

Crear un control EDIT


Como lo vimos anteriormente utilizaremos la función CreateWindow indicándole como nombre de clase EDIT y el nombre de ventana será el texto inicial que tomara el control, los demás parámetros ya los conocemos, ID_EDIT será el identificador para nuestro control, contamos con los siguientes estilos para un control win32 edit:

ES_AUTOHSCROLL | ES_AUTOVSCROLL
Habilita el desplazamiento automático horizontal y vertical respectivamente del texto.
ES_CENTER
Centra el texto.
ES_LEFT
Alinea el texto en el margen izquierdo.
ES_LOWERCASE |  ES_UPPERCASE
Convierte el texto en minúsculas o mayúsculas respectivamente.
ES_MULTILINE
Crea un control que permite la entrada de texto en varias líneas.
ES_NOHIDESEL
Si creamos el control con el estilo ES_NOHIDESEL, el resaltado del texto permanece aunque el control pierda el foco.
ES_NUMBER
Solo permite la entrada de números.
ES_OEMCONVERT
Convierte en texto introducido en el control edit. El texto se convierte de juego de caracteres de Windows a de OEM y después vuelve al juego de Windows.
ES_PASSWORD
Muestra un asterisco (*) para cada carácter introducido en el control edit. Se puede usar el mensaje EM_SETPASSWORDCHAR para cambiar el carácter que será mostrado en lugar del asterisco.
ES_READONLY
Crea un control edit de solo lectura.
ES_RIGHT
Alinea el texto a la izquierda.
ES_WANTRETURN
Indica que se insertará un retorno de línea cuando el usuario presione la tecla ENTER mientras introduce texto en un control edit multilínea dentro de un dialog box.

case WM_CREATE:
     hEdit = CreateWindow(L"EDIT", L"Hola Control EDIT"WS_CHILD |
 WS_VISIBLE WS_BORDER | WS_HSCROLL | WS_VSCROLL |
 ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE10, 10, 350, 150, hWndreinterpret_cast<HMENU>(ID_EDIT), hInst, NULL);
break;

Cambiar texto de un control EDIT 


Para cambiar el texto utilizaremos la MACRO Edit_SetText(hEdit, L”Nuevo Texto”) debemos pasar como parámetro el manejador del control y el nuevo texto, para usar esta macro debemos agregar el encabezado Windowsx.h de este modo #include <windowsx.h>, estas macro nos facilitan el trabajo con los controles, anteriormente trabajamos enviando mensajes a cada control, estas macro lo hacen por nosotros, por ejemplo Edit_SetSel(hEdit, 0, -1) selecciona todo el texto del edit anteriormente lo escribiríamos como SendMessage(hEdit, EM_SETSEL, 0, -1), windowx contiene macros para trabajar con todos los controles los que podemos identificar pues inician con: nombrecontrol_ por ejemplo para los controles edit las macro empiezan por Edit_, para el botón Button_.

case WM_COMMAND:
       wmId    = LOWORD(wParam);
       switch (wmId)
       {
       case ID_EDIT_SET:
             //cambia el texto del edit
             Edit_SetText(hEdit, L"Nuevo Texto");
             break;
       case ID_EDIT_COUNT:
             wchar_t txt[50];
             //devuelve la cantidad de lineas de texto
             lineCount = Edit_GetLineCount(hEdit);
             swprintf_s(txt, L"Cantidad de lineas: %d", lineCount);
             MessageBox(hWnd, txt, L"Texto"MB_OK);
             break;
       case ID_EDIT_VER:
             wchar_t text[1024];
             //obtiene el texto del edit
             Edit_GetText(hEdit, text, 1024);
             MessageBox(hWnd, text, L"Texto"MB_OK);
             break;
       default:
             return DefWindowProc(hWnd,
                                  message,
                                  wParam,
                                  lParam);
       }
break;

Cambiar color de fondo y de texto de un control win32 edit, lo hacemos del mismo modo como los cambiamos en el control static.

case WM_CTLCOLOREDIT:
       SetTextColor((HDC)wParamRGB(0,255,0));
       SetBkColor((HDC)wParamRGB(0,0,0));
return (LRESULT)CreateSolidBrush(RGB(0,0,0));

Si deseamos también podemos cambiar la fuente creando una o cargando una existente usamos el método CreateFont que devuelve un manejador de fuente que pasaremos como parámetro WPARAM para el mensaje WM_SETFONT, las fuentes las veremos en detalle más adelante.

hFont = CreateFont(20, 0, 0, 0, 300,
           FALSEFALSEFALSEDEFAULT_CHARSET,
             OUT_TT_PRECISCLIP_DEFAULT_PRECIS,
             PROOF_QUALITYDEFAULT_PITCH | FF_ROMAN,
             L"Arial");

SendMessage(hEdit,
            WM_SETFONT,
           (WPARAM)hFont,
            MAKELPARAM(TRUE, 0));



Otra cosa que podemos hacer es agregar un texto de ayuda para indicarle al usuario que tipo de dato debemos insertar en el control, los haremos con la siguiente macro:

BOOL Edit_SetCueBannerText(HWND hwnd, LPCWSTR lpcwText);

Comentarios

  1. EXCELENTES PUBLICACIONES SIGUE HACIENDO MAS DE WIN32 PORFAVOR

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Procesamiento de imágenes en OpenCV

Acceso a la webcam con OpenCV

Conociendo la clase cv::Mat de OpenCV