Solucion a dolores de caveza:
la justificacion de este post, es por la urgencia con la cual algunos programadores iniciados/avanzados buscan alguna API o Lib que les ayude a crear sus GUI para evitar usar la API Win32. Pues existen varias Libs que nos permiten la comunicacion con los sistemas de video, sonidos, perifericos, etc; que son los componentes basicos a manejar a la hora de crear nuestras propias GUI.
Para esos propositos de desarrollo de GUI, mencionare algunas existentes que se utilizan, esta la famosa (Allegro.h, Glut, Direct3d/2d, WxWidgets, SDL, etc) pero a lo mejor dirian "No utilizo ningunas de estas por su complejidad" no es claro todo tiene su nivel de complejidad pero a la hora de pensar tomar alguna API entonces piencen "Sera mas compleja que la anterior", "Sera multiplataforma", "Que puedo hacer con esta Lib o API". Entonces tendrian buena eleccion, eso nos hace pensar que dependiendo de nuestros objetivos podremos elegir la Lib correcta.
Bueno una de las Libs mas pontetes y usuales para graficos seria SDL, que a lo mejor has leido detalles o info.. de esta pero nunca te atreviste a tocarla, y si lo hiciste te tropezaste con que "Esta Lib no tiene funciones para crear Botones, Texbox, ListBox, Label, etc", pero entonces aqui entra la imaginacion y los eventos que ya trae SDL que es para lo que esta echa esta Lib.
He intentado desarrollar Aplicaciones Graficas con esta Lib y me ha ido bien, desarrolle algunas funciones para la creacion de botones, texbox, label, showbox, etc. Para poder ir desarrollando mas rapido mis aplicaciones (Presupuesto Economico) y haciendo uso de lo que se conoce como "Interfaz de Usuario" para poder comunicar la GUI con el Sistema/ejecutable y a si simular o imitar lo que son las señales con las API actuales como GTK, QT, Glut, etc.
Voy a dejar el codigo del .h y un ejemplo de como utilizarlo junto con un Source y Ejecutable.
Nota: Si no estas familiarizado con SDL y C no intentes forzar tu comprension.
Código
//cabecera.h para incluir en main.c le llamo "components.h" #define ROJO 1 #define VERDE 2 #define AZUL 3 #define BLANCO 4 #define NEGRO 5 #define BOTON "boton.jpg" #define FONT "lsansd.ttf" SDL_Surface *pantalla; //button void create_button(int x, int y, const char *file, int tam_label, int color) { SDL_Surface *boton, *img_label; SDL_Rect pos_boton, pos_label; TTF_Font *label; SDL_Color paleta_color; boton = IMG_Load(BOTON); //posicion boton pos_boton = (SDL_Rect) {x, y, 0, 0}; //posicion etiqueta pos_label = (SDL_Rect) {x+5, y+15, 0, 0}; //cargar fuente y tamano label = TTF_OpenFont(FONT, tam_label); //rojo if(color==1) { paleta_color.r=255; paleta_color.b=0; paleta_color.g=0; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //verde if(color==2) { paleta_color.r=0; paleta_color.b=0; paleta_color.g=255; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //azul if(color==3) { paleta_color.r=0; paleta_color.b=255; paleta_color.g=0; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //blanco if(color==4) { paleta_color.r=255; paleta_color.b=255; paleta_color.g=255; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //negro if(color==4) { paleta_color.r=0; paleta_color.b=0; paleta_color.g=0; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //volcamos superficies en buffer SDL_BlitSurface(boton, NULL, pantalla, &pos_boton); SDL_BlitSurface(img_label, NULL, pantalla, &pos_label); //pintamos imagen SDL_Flip(pantalla); //liberamos superficies SDL_FreeSurface(boton); SDL_FreeSurface(img_label); } //label void create_label(int x, int y, const char *file, int tam_label, int color) { SDL_Surface *img_label; SDL_Rect pos_label; TTF_Font *label; SDL_Color paleta_color; //posicion etiqueta pos_label = (SDL_Rect) {x, y, 0, 0}; //cargar fuente y tamano label = TTF_OpenFont(FONT, tam_label); //rojo if(color==1) { paleta_color.r=255; paleta_color.b=0; paleta_color.g=0; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //verde if(color==2) { paleta_color.r=0; paleta_color.b=0; paleta_color.g=255; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //azul if(color==3) { paleta_color.r=0; paleta_color.b=255; paleta_color.g=0; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //blanco if(color==4) { paleta_color.r=255; paleta_color.b=255; paleta_color.g=255; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //negro if(color==5) { paleta_color.r=0; paleta_color.b=0; paleta_color.g=0; img_label = TTF_RenderText_Blended(label, file, paleta_color); } //volcamos superficies en buffer SDL_BlitSurface(img_label, NULL, pantalla, &pos_label); //pintamos imagen SDL_Flip(pantalla); //liberamos superficies SDL_FreeSurface(img_label); } //texbox void create_texbox(int x, int y) { SDL_Surface *texbox; SDL_Rect pos_texbox; pos_texbox = (SDL_Rect) {x, y, 0, 0}; texbox = IMG_Load("texbox.jpg"); SDL_BlitSurface(texbox, NULL, pantalla, &pos_texbox); SDL_Flip(pantalla); SDL_FreeSurface(texbox); } //escribir void SDL_printf(int x, int y, const char *file, int tam_letra, int color) { SDL_Surface *letra; SDL_Rect pos_letra; TTF_Font *letra_; SDL_Color paleta_color; //posicion letra pos_letra = (SDL_Rect) {x, y, 0, 0}; //cargar fuente y tamano letra_= TTF_OpenFont(FONT, tam_letra); //rojo if(color==1) { paleta_color.r=255; paleta_color.b=0; paleta_color.g=0; letra = TTF_RenderText_Blended(letra_, file, paleta_color); } //verde if(color==2) { paleta_color.r=0; paleta_color.b=0; paleta_color.g=255; letra = TTF_RenderText_Blended(letra_, file, paleta_color); } //azul if(color==3) { paleta_color.r=0; paleta_color.b=255; paleta_color.g=0; letra = TTF_RenderText_Blended(letra_, file, paleta_color); } //blanco if(color==4) { paleta_color.r=255; paleta_color.b=255; paleta_color.g=255; letra = TTF_RenderText_Blended(letra_, file, paleta_color); } //negro if(color==5) { paleta_color.r=0; paleta_color.b=0; paleta_color.g=0; letra = TTF_RenderText_Blended(letra_, file, paleta_color); } //volcamos superficie en buffer SDL_BlitSurface(letra, NULL, pantalla, &pos_letra); //pintamos imagen SDL_Flip(pantalla); //liberamos superficie SDL_FreeSurface(letra); } void scroll_back(int x, int y) { SDL_Surface *cursor=IMG_Load("cursor.jpg"); SDL_Rect pos_coord=(SDL_Rect){x, y-4, 0, 0}; SDL_BlitSurface(cursor, NULL, pantalla, &pos_coord); SDL_Flip(pantalla); } void scroll_clear(int x, int y) { SDL_Surface *cur_blanco=IMG_Load("cur_bb.jpg"); SDL_Rect pos_coord_cb=(SDL_Rect){x, y-4, 0, 0}; SDL_BlitSurface(cur_blanco, NULL, pantalla, &pos_coord_cb); SDL_Flip(pantalla); } void cursor_white(int x, int y) { SDL_Surface *cursor=IMG_Load("cur_bb.jpg"); SDL_Rect pos_coord=(SDL_Rect){x, y-4, 0, 0}; SDL_BlitSurface(cursor, NULL, pantalla, &pos_coord); SDL_Flip(pantalla); }
Luego que entiendo todo este royo de los create_button, create_label y esas cosas, entonces me voy a codear la aplicacion.
Código
#include <stdio.h> #include <stdlib.h> #include <SDL.h> #include <SDL_image.h> #include <SDL_ttf.h> #include "components.cpp" #define SIGNAL_CEDULA 4 #define SIGNAL_APELLIDO 5 #define SIGNAL_DIRECCION 6 #define SIGNAL_NOMBRE 1 #define bytes 64 void int_value(int signal, const char ctr); void scroll_back(int x, int y); void scroll_clear(int x, int y); void clear_bytes(int sig); struct text{ char nombre[bytes]; char apellido[bytes]; char cedula[bytes]; char direc[bytes]; }texbox; int sig=103, sig_y=91, i=0, signal, active_event=0; int main(int argc, char *argv[]) { SDL_Surface *image; SDL_Rect pos=(SDL_Rect){0,0,0,0}; SDL_Event event; int done = 0; atexit(SDL_Quit); //inicializamos el subsistema de letras TTF_Init(); //inicializamos el subsistema de video SDL_Init(SDL_INIT_VIDEO); //cargamos imagen image=IMG_Load("nave.jpg"); //llamamos buffer de video con propiedades espesificas pantalla = SDL_SetVideoMode(640,300,24,SDL_HWSURFACE); //titulo de ventana SDL_WM_SetCaption("Formulario de Usuario",NULL); //bliteamos superficie en ventana SDL_BlitSurface(image, NULL, pantalla, &pos); //volcamos superficie en pantalla SDL_Flip(pantalla); //elementos de ventana create_label(100, 50, "Nombre", 20, AZUL); create_texbox(100, 80); create_label(100, 150, "Apellido", 20, AZUL); create_texbox(100, 180); create_label(350, 50, "Direccion", 20, AZUL); create_texbox(350, 80); create_label(350, 150, "Cedula", 20, AZUL); create_texbox(350, 180); create_button(100,250,"Guardar",15,VERDE); create_button(350,250,"Salir",15,VERDE); //bucle o loop de aplicacion while(done == 0) { //esperamos eventos en cola SDL_WaitEvent(&event); //consultamos eventos en cola if (event.type == SDL_QUIT) { done = 1; } /*else if(event.type==SDL_MOUSEBUTTONDOWN) { fprintf(stdout, "x=%i|y=%i\n", event.button.x, event.button.y); }*/ else if((event.button.x>=100&event.button.x<=320)&&(event.button.y>=79&event.button.y<=100)) { if(event.button.button==1) { active_event=1; scroll_clear(sig, sig_y); i=0; sig=103, sig_y=91; scroll_back(sig, sig_y); signal=SIGNAL_NOMBRE; } } else if((event.button.x>=100&event.button.x<=321)&&(event.button.y>=180&event.button.y<=201)) { if(event.button.button==1) { active_event=1; scroll_clear(sig, sig_y); i=0; sig=103, sig_y=191; scroll_back(sig, sig_y); signal=SIGNAL_APELLIDO; } } else if((event.button.x>=350&event.button.x<=571)&&(event.button.y>=79&event.button.y<=101)) { if(event.button.button==1) { active_event=1; scroll_clear(sig, sig_y); i=0; sig=353, sig_y=91; scroll_back(sig, sig_y); signal=SIGNAL_DIRECCION; } } else if((event.button.x>=350&event.button.x<=571)&&(event.button.y>=178&event.button.y<=202)) { if(event.button.button==1) { active_event=1; scroll_clear(sig, sig_y); i=0; sig=353, sig_y=191; scroll_back(sig, sig_y); signal=SIGNAL_CEDULA; } } else if((event.button.x>=100&event.button.x<=200)&&(event.button.y>=250&event.button.y<=285)) { create_button(100,250,"Guardar",15,AZUL); SDL_Delay(50); create_button(100,250,"Guardar",15,VERDE); if(event.button.button==1&&event.type==SDL_MOUSEBUTTONDOWN) { active_event=0; fprintf(stdout, "%s\n%s\n%s\n%s\n", texbox.nombre, texbox.apellido, texbox.direc, texbox.cedula); } } else if((event.button.x>=354&event.button.x<=449)&&(event.button.y>=250&event.button.y<=285)) { create_button(350,250,"Salir",15,AZUL); SDL_Delay(50); create_button(350,250,"Salir",15,VERDE); if(event.button.button==1&&event.type==SDL_MOUSEBUTTONDOWN) { //codigo accion salir done=1; } } //eventos de teclado else if(active_event==1) { if(event.key.keysym.sym==SDLK_a&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "a", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'a'); } else if(event.key.keysym.sym==SDLK_b&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "b", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'b'); } else if(event.key.keysym.sym==SDLK_c&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "c", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'c'); } else if(event.key.keysym.sym==SDLK_d&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "d", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'd'); } else if(event.key.keysym.sym==SDLK_e&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "e", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'e'); } else if(event.key.keysym.sym==SDLK_f&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "f", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'f'); } else if(event.key.keysym.sym==SDLK_g&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "g", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'g'); } else if(event.key.keysym.sym==SDLK_h&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "h", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'h'); } else if(event.key.keysym.sym==SDLK_i&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, " i", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'i'); } else if(event.key.keysym.sym==SDLK_j&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "j", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'j'); } else if(event.key.keysym.sym==SDLK_e&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "k", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'k'); } else if(event.key.keysym.sym==SDLK_l&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "l", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'l'); } else if(event.key.keysym.sym==SDLK_m&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "m", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'm'); } else if(event.key.keysym.sym==SDLK_n&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "n", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'n'); } else if(event.key.keysym.sym==SDLK_o&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "o", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'o'); } else if(event.key.keysym.sym==SDLK_p&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "p", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'p'); } else if(event.key.keysym.sym==SDLK_q&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "q", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'q'); } else if(event.key.keysym.sym==SDLK_r&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "r", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'r'); } else if(event.key.keysym.sym==SDLK_s&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "s", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 's'); } else if(event.key.keysym.sym==SDLK_KP0&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "0", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '0'); } else if(event.key.keysym.sym==SDLK_KP1&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "1", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '1'); } else if(event.key.keysym.sym==SDLK_KP2&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "2", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '2'); } else if(event.key.keysym.sym==SDLK_KP3&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "3", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '3'); } else if(event.key.keysym.sym==SDLK_KP4&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "4", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '4'); } else if(event.key.keysym.sym==SDLK_KP5&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "5", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '5'); } else if(event.key.keysym.sym==SDLK_KP6&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "6", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '6'); } else if(event.key.keysym.sym==SDLK_KP7&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "7", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '7'); } else if(event.key.keysym.sym==SDLK_KP8&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "8", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '8'); } else if(event.key.keysym.sym==SDLK_KP9&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "9", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '9'); } else if(event.key.keysym.sym==SDLK_t&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "t", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 't'); } else if(event.key.keysym.sym==SDLK_u&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "u", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'u'); } else if(event.key.keysym.sym==SDLK_v&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "v", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'v'); } else if(event.key.keysym.sym==SDLK_w&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "w", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'w'); } else if(event.key.keysym.sym==SDLK_x&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "x", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'x'); } else if(event.key.keysym.sym==SDLK_y&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "y", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'y'); } else if(event.key.keysym.sym==SDLK_k&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "k", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'k'); } else if(event.key.keysym.sym==SDLK_z&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "z", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, 'z'); } else if(event.key.keysym.sym==SDLK_SPACE&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, " ", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, ' '); } else if(event.key.keysym.sym==SDLK_KP_DIVIDE&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "/", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '/'); } else if(event.key.keysym.sym==SDLK_BACKSPACE&&event.type==SDL_KEYDOWN) { clear_bytes(signal); scroll_clear(sig, sig_y); sig=sig-8; scroll_back(sig, sig_y); i--; } else if(event.key.keysym.sym==SDLK_KP_MINUS&&event.type==SDL_KEYDOWN) { cursor_white(sig, sig_y); SDL_printf(sig, sig_y, "-", 10, ROJO); sig=sig+8; scroll_back(sig, sig_y); int_value(signal, '-'); } else if(sig<=104) { sig = 103; } } } //liberamos superficie principal SDL_FreeSurface(pantalla); } /*funcion rrecoje chars y los mete en array de acuerdo a CONSTANTES*/ void int_value(int sig, const char ctr) { if(sig==SIGNAL_NOMBRE) { texbox.nombre[i]=ctr; i++; } if(sig==SIGNAL_APELLIDO) { texbox.apellido[i]=ctr; i++; } if(sig==SIGNAL_CEDULA) { texbox.cedula[i]=ctr; i++; } if(sig==SIGNAL_DIRECCION) { texbox.direc[i]=ctr; i++; } } void clear_bytes(int sig) { if(sig==SIGNAL_NOMBRE) { texbox.nombre[strlen(texbox.nombre)-1]=' '; } if(sig==SIGNAL_APELLIDO) { texbox.apellido[strlen(texbox.apellido)-1]=' '; } if(sig==SIGNAL_CEDULA) { texbox.cedula[strlen(texbox.cedula)-1]=' '; } if(sig==SIGNAL_DIRECCION) { texbox.direc[strlen(texbox.direc)-1]=' '; } }
Aqui es donde entra la complejidad y aplicacion de las funciones anteriormente mencionadas, es la aplicacion en si.
Salvedad: Posteo esto, para que critiquen de como mejorar/implementar el codigo de mi Lib.h no del Main.c el objetivo es que se animen y logremos intercambiar conocimientos y aprender mas todos. Pueden criticar y Postear el codigo en otros foros respetando la fuente y el autor. Me reservare los detalles y explicacion de cada syntaxis, para que ustedes mismos opinen y pregunten. !!
Salvedad 2: No olviden que aqui trabajamos con las Libs SDL_image.h, SDL_ttf.h. O sea tienen que tener su Dev-c++ en la opcion Linker con la siguiente Confg: (-lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_ttf ) e instalar todas las Libs en el directorio Include de nuestra instalacion Dev-c++ si andas en alguna Distro Linux enlaza con -lMyLib.o.
Post Finalizado Suerte !!!!
He cumplido lo prometido aqui les dejo el .rar con el ejecutable y las .jpg y Fonts para que puedan entender mejor el codigo ya una vez ejecutado !!
http://uploading.com/files/eb8c9562/Proyecto.rar/
Tambien la imagen para mas motivacion !!
http://imageshack.us/photo/my-images/708/dibujo2xz.png/