elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  codigo sencillo para crear combo box
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: codigo sencillo para crear combo box  (Leído 2,047 veces)
DJINVACION2005

Desconectado Desconectado

Mensajes: 9


Ver Perfil
codigo sencillo para crear combo box
« en: 17 Junio 2008, 06:46 »

Hola a todos me gustaria su ayuda tengo que hacer un combo box pero no se como. Tengo una idea pero necesito su sugerencia.

class combo {
 
     private:
             struct stdCombo{
                   int ID;
                   char Dat [50];
                   struct E *next;
                   struct E *Inicio;

     public:
            void agregar(char *CA);
            void recorrido;
 }

void main()
{
   combo a,b;
      a.agregar("maria");
      b.agregar("juan");

........hasta aqui no se que mas hacer.................


Agradeceria su ayuda.



En línea

Nanocity

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: codigo sencillo para crear combo box
« Respuesta #1 en: 17 Junio 2008, 13:47 »

?¿

No entiendo muy bien lo que quieres hacer... Es decir, una combobox es un elemento gráfico y por lo tanto tendrías que usar alguna librería gráfica como Qt o GTK que ya traen una clase para lo que quieres hacer. Si lo que pretendes es hacerla desde cero, pues ya ahí no puedo ayudarte pero si solo es para la combobox no creo que merezca la pena...

También puede que estés intentando emular el comportamiento de una combobox con una clase, en ese caso tendras que añadir métodos que te permitan seleccionar un elemento segun su id (el orden), etc. Ya depende de como quieras emularla.

Un saludo.


En línea

Eran nueve, nueve bajo las tres lunas,
bajo la luz del atardecer de otoño.
Mientras el mundo caía, ellos se alzaban
hacia el corazon de la historia
DJINVACION2005

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: codigo sencillo para crear combo box
« Respuesta #2 en: 17 Junio 2008, 17:33 »

ok gracias en realidad no hay que hacer nada grafico solo simular la estructura de un combo box usando clases y estructuras pero la verdad no logro afinar este.
En línea

Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: codigo sencillo para crear combo box
« Respuesta #3 en: 20 Junio 2008, 00:16 »

Algo sencillo ?? Pues te dejo un trozo de codigo que cree sobre la marcha, es bastante simple y rustico asi q no esperes gran cosa, pero al menos puedes hacer que se desplige el combox, la seleccion y demas acciones típicas la haras tu.

ClassMarco.cpp
Código
  1. #include<stdarg.h>
  2. #include <string.h>
  3. #include <iostream>
  4.  
  5. #define MAXBUFF 80
  6.  
  7. #define M1  187
  8. #define M2  205
  9. #define M3  201
  10. #define M4  200
  11. #define M5  188
  12. #define M6  186
  13.  
  14. using namespace std;
  15.  
  16.  
  17.  
  18. class ClassMarco
  19. {
  20.   private:
  21.           short largo_;
  22.   private:
  23.           void Linea(void);
  24.           void PonEspacios (char *espacios, short len);
  25.   public:
  26.           ClassMarco(void);
  27.           ClassMarco(short l);
  28.           ~ClassMarco ();
  29.           void MarcoSuperior(void);    
  30.           void MarcoInferior(void);  
  31.           void MarcoInferiorLn(void);
  32.           void EscribirEnMarco(char *msg, ...);
  33.           void BorraMarco();
  34.           void Resize (short l);
  35.           short Size();
  36.  
  37.  
  38. };
  39.  
  40. ClassMarco::ClassMarco()
  41. {
  42.   largo_ = 0; //valor por defecto                        
  43. }
  44. ClassMarco::ClassMarco(short l)
  45. {
  46.   largo_ = l;                          
  47. }
  48. ClassMarco::~ClassMarco()
  49. {
  50. //no hacemos nada
  51. }
  52.  
  53. void ClassMarco::Resize(short l)
  54. {
  55.   largo_ = l;
  56. }
  57.  
  58. short ClassMarco::Size()
  59. {
  60.   return largo_;      
  61. }
  62. void ClassMarco::Linea ()
  63. {
  64.   short i;
  65.  
  66.   for (i = 0; i < largo_; i++)
  67.      cout << (char) M2;    
  68. }
  69.  
  70.  
  71. void ClassMarco::MarcoSuperior ()
  72. {
  73.   cout << (char) M3;
  74.   Linea ();
  75.   cout << (char) M1;
  76.   cout << endl;
  77. }
  78.  
  79. void ClassMarco::MarcoInferior()
  80. {
  81.   cout << (char) M4;
  82.   Linea ();
  83.   cout << (char) M5;
  84. }
  85. void ClassMarco::MarcoInferiorLn()
  86. {
  87.   MarcoInferior();
  88.   cout << endl;    
  89. }
  90. void ClassMarco::BorraMarco()
  91. {
  92.  short i;
  93.  cout << "\r";
  94.  for (i = largo_; i > 0; i--)
  95.    cout << " ";
  96.  cout << "\r";
  97. }
  98. void ClassMarco::PonEspacios (char *espacios, short len)
  99. {
  100.   short i;
  101.  
  102.   for (i = 0; i < largo_ - (len + 2); i++)
  103.      espacios[i] = ' ';  
  104.   espacios[i] = '\x0';  
  105. }
  106.  
  107. void ClassMarco::EscribirEnMarco(char *msg, ...)
  108. {
  109. va_list p;
  110. char buffer[MAXBUFF], espacios[100], aux[MAXBUFF];
  111. int len, i, j, k;
  112.  
  113. va_start(p,msg);
  114. vsnprintf(buffer,sizeof(buffer),msg,p);
  115. va_end(p);
  116. len = strlen(buffer);
  117. if (len > largo_ || len > 80)  /** prueba**/
  118.    {
  119.       k = 0;
  120.       i = largo_;
  121.       //buscamos espacio en blanco
  122.       while(buffer[i] != ' ')
  123.       {
  124.          cout << buffer[i];
  125.          i--;
  126.       }
  127.       //hacemos la copia
  128.       for(j = 0; j < i; j++)
  129.          aux[k++] = buffer[j];  
  130.       aux[k] = '\x0'; //cerramos la cadena
  131.      // printf("\naux = %s", aux);
  132.       PonEspacios(espacios, strlen(aux));
  133.       cout << (char) M6 << aux << espacios << (char) M6;
  134.       cout << endl;
  135.    }
  136.    else  /** hasta aqui llega la prueba **/
  137.    {
  138.       PonEspacios(espacios,  len);
  139.  
  140.       printf ("%c %s %s%c", M6, buffer, espacios, M6);    
  141.       printf ("\n");
  142.    }
  143. }
  144.  
ClassCombo.cpp
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. #include "ClassMarco.cpp"
  5. using namespace std;
  6.  
  7.  
  8. typedef struct stdCombo
  9. {
  10.   int id_;
  11.   char *dat_;
  12.   struct stdCombo *sig_;        
  13. }stdCombo;
  14.  
  15. class ClassCombo : public ClassMarco
  16. {
  17.  
  18.   private:
  19.           stdCombo *inicio_;
  20.           ClassMarco marco_;    
  21.   public:
  22.           ClassCombo();
  23.           ~ClassCombo();
  24.           void Agregar(int id, char *);
  25.           void Mostrar(void);
  26.           void Mostrar (stdCombo *);
  27.           void Desplegable();
  28.  
  29. };
  30.  
  31. /**********************************************************************/
  32.  
  33. int getch(void)
  34. {
  35.   int car;
  36.   DWORD leidos, modo;
  37.  
  38.   GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo);  
  39.   SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT);
  40.   ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &car, 1, &leidos, NULL);
  41.   SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo);  
  42.   return car;  
  43. }
  44. /***********************************************************************/
  45. ClassCombo::ClassCombo()
  46. {
  47.   inicio_ = NULL;    
  48.   marco_.Resize(7);            
  49. }
  50.  
  51. ClassCombo::~ClassCombo()
  52. {
  53.   stdCombo *p;
  54.   while (inicio_)
  55.   {
  56.      p = inicio_->sig_;
  57.      delete(inicio_);
  58.      inicio_ = p;    
  59.   }            
  60.  
  61. }
  62.  
  63. void ClassCombo::Agregar (int id, char *str)
  64. {
  65.   stdCombo *p;
  66.   p = new stdCombo;
  67.  
  68.   p->dat_ = str;
  69.   p->id_   = id;
  70.   p->sig_ = NULL;
  71.   if (inicio_)
  72.      p->sig_ = inicio_;    
  73.   inicio_ = p;    
  74.   //miramos el tamaño de la cadena mayor para tener las dimensiones del marco
  75.   if (marco_.Size() < strlen(str) + 5)
  76.      marco_.Resize(strlen(str) + 5); //redimensionamos          
  77. }
  78.  
  79. void ClassCombo::Mostrar()
  80. {
  81.  marco_.MarcoSuperior();
  82.  Mostrar(inicio_);    
  83. }
  84.  
  85. void ClassCombo::Mostrar(stdCombo *ptr)
  86. {
  87.   stdCombo *p;
  88.   p = ptr;
  89.  
  90.   if (!p)
  91.   {
  92.      marco_.EscribirEnMarco("Vacio");    
  93.   }
  94.   else
  95.      while(p)
  96.      {
  97.         marco_.EscribirEnMarco("%d %s",p->id_, p->dat_);
  98.         p = p->sig_;        
  99.      }    
  100.   marco_.MarcoInferiorLn();
  101. }
  102.  
  103. void ClassCombo::Desplegable()
  104. {
  105.   stdCombo *p;
  106.   char tecla;
  107.   p = inicio_;
  108.   marco_.MarcoSuperior();
  109.   if (!p)
  110.       marco_.EscribirEnMarco("Vacio");
  111.   else
  112.       marco_.EscribirEnMarco("%d %s",p->id_, p->dat_);
  113.   marco_.MarcoInferior();  
  114.   /******************************************************/
  115.   tecla = getch(); //capturamos la tecla
  116.   if (tecla == '\t') //si es la tecla tabulador ..
  117.   {
  118.      marco_.BorraMarco(); //borramos el marco inferior
  119.      Mostrar(p->sig_);  //mostramos EL RESTO de los elementos
  120.   }
  121.   else
  122.      cout << endl;
  123. }
  124.  
  125. int main()
  126. {
  127.   ClassCombo *a, *b;
  128.   int i;
  129.   char tecla;
  130.   a = new ClassCombo;
  131.   b = new ClassCombo;
  132.   cout << "ComboBox (o algo asi :)) vacio" << endl;
  133.   b->Mostrar();
  134.   //-- Introduccion de los datos
  135.   for (i = 0; i < 10; i++)
  136.      a->Agregar(i, "maria");
  137.   a->Agregar(10, "Juan");
  138.   a->Agregar(11, "Josue");
  139.   //--
  140.   cout << "ComboBox con elementos (pulsa la tecla TAB para desplegarlo)" << endl;
  141.   a->Desplegable();
  142.  
  143.   system("pause>nil");
  144.   return 0;
  145. }
  146.  

Un saludo!
« Última modificación: 20 Junio 2008, 00:21 por Flakito81 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines