anun1

sábado, 4 de diciembre de 2021

Crear formulario en c++ con textbox, label y botones en Dev C++

Hola amigos hoy crearemos un formulario con un boton, un textbox y label asi que para eso abriremos nuestro editor de c++ que es Dev c++ y elegimos un proyecto nuevo



luego elegimos en la siguiente ventana  la opcion Windows Application y damos aceptar




bueno crearemos un cuadro de texto asi que para eso escribimos lo siguiente en el codigo, pero para eso ubicamos la linea que dice 

switch(Message) {

y damos unos enter por que es en esa seccion donde teclearemos el codigo, quedara algo asi


ahora para crear el cuadro de texto tecleamos la seccion case WM_CREATE quedaria asi



luego de esto crearemos un label dentro de la seccion WM_CREATE para eso tecleamos la siguiente linea

CreateWindow(TEXT("STATIC"),TEXT("Serial:"),WS_VISIBLE | WS_CHILD,10,40,60,20,hwnd,(HMENU) NULL,NULL,NULL);

luego de esto colocamos un break lineas abajo para que no se cierre el formulario el codigo quedaria asi


compilamos y ejecutamos y nos aparecera el siguiente formulario



bueno ahora pasaremos a crear el cuadro de texto para eso definimos la siguiente variable #define ID_TXTSERIAL 1 en la parte de arriba debajo de la linea #include <windows.h> quedaria algo asi


una linea abajo declaramos la variable serial asi

static HWND Serial;

luego dentro de la seccion WM_CREATE ponemos la siguiente linea para crear el cuadro de texto

Serial=CreateWindow(TEXT("EDIT"),TEXT(""),WS_VISIBLE | WS_CHILD | WS_BORDER,80,40,200,20,hwnd,(HMENU) ID_TXTSERIAL,NULL,NULL);

compilamos y ejecutamos y se mostrara lo siguiente



ahora pasaremos a crear un boton para eso definimos una variable para el boton y sera esta #define ID_BTN 2  en la seccion WM_CREATE ponemos la siguinete linea

CreateWindow(TEXT("BUTTON"),TEXT("VALIDAR"),WS_VISIBLE | WS_CHILD,80,100,100,25,hwnd,(HMENU) ID_BTN,NULL,NULL);

ahora compilamos y ejecutamos y se mirara asi


ahora si queremos leer lo que esta en el cuadro de texto y mostrarlo como un mensaje agregamos otra seccion llamada case WM_COMMAND se vera algo asi


dentro de esta seccion tecleamos el siguiente codigo para leer lo que estra en el cuadro de texto y mostrarlo como mensaje

if(LOWORD(wParam==ID_BTN))

{

   int largo = GetWindowTextLength(Serial)+1; //api optiene el numero de caracteres 

   char texto[largo];// declara variable texto con el numero de caracteres

   GetWindowText(Serial,texto,largo);//lee lo que esta en el cuadro de texto 

   MessageBox(hwnd,texto,"nada",64);//muestra un mensaje en pantalla con lo que tiene la variable texto

}

break;

lo compilamos y ejecutamos y nos mostrara lo siguiente



se mirara algo asi



el codigo completo seria este

#include <windows.h>

#define ID_TXTSERIAL 1

#define ID_BTN 2

static HWND Serial;


/* This is where all the input to the window goes to */

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {

switch(Message) {

    case WM_CREATE:{

      CreateWindow(TEXT("STATIC"),TEXT("Serial:"),WS_VISIBLE | WS_CHILD,10,40,60,20,hwnd,(HMENU) NULL,NULL,NULL);

      Serial=CreateWindow(TEXT("EDIT"),TEXT(""),WS_VISIBLE | WS_CHILD | WS_BORDER,80,40,200,20,hwnd,(HMENU) ID_TXTSERIAL,NULL,NULL);

      CreateWindow(TEXT("BUTTON"),TEXT("VALIDAR"),WS_VISIBLE | WS_CHILD,80,100,100,25,hwnd,(HMENU) ID_BTN,NULL,NULL);

  break;

  }

case WM_COMMAND:{

   if(LOWORD(wParam==ID_BTN))

   {

int largo = GetWindowTextLength(Serial)+1;

char texto[largo];

GetWindowText(Serial,texto,largo); 

MessageBox(hwnd,texto,"nada",64);

   }

   break;

}

/* Upon destruction, tell the main thread to stop */

  case WM_DESTROY: {

PostQuitMessage(0);

break;

}

/* All other messages (a lot of them) are processed using default procedures */

default:

return DefWindowProc(hwnd, Message, wParam, lParam);

}

return 0;

}


/* The 'main' function of Win32 GUI programs: this is where execution starts */

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

WNDCLASSEX wc; /* A properties struct of our window */

HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */

MSG msg; /* A temporary location for all messages */


/* zero out the struct and set the stuff we want to modify */

 memset(&wc,0,sizeof(wc));

 wc.cbSize = sizeof(WNDCLASSEX);

wc.lpfnWndProc = WndProc; /* This is where we will send messages to */

wc.hInstance = hInstance;

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wc.lpszClassName = "WindowClass";

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */

wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */


if(!RegisterClassEx(&wc)) {

    MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);

return 0;

}


hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,

   CW_USEDEFAULT, /* x */

   CW_USEDEFAULT, /* y */

   640, /* width */

   480, /* height */

   NULL,NULL,hInstance,NULL);


if(hwnd == NULL) {

MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);

return 0;

}


 /*This is the heart of our program where all input is processed and sent to WndProc. Note that GetMessage blocks code flow until it receives something, so

this loop will not produce unreasonably high CPU usage

*/

while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */

TranslateMessage(&msg); /* Translate key codes to chars if present */

DispatchMessage(&msg); /* Send it to WndProc */

}

return msg.wParam;

}



bueno creo que eso es todo por hoy espero les halla gustado saludos Flamer


No hay comentarios.:

Publicar un comentario