Retroceder   Foros del Web > Temas generales de computación > Programación > C/C++

Respuesta
 
Herramientas Desplegado
Antiguo 04-ene-2007, 15:23   #1 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Winapi

Hola antes que cualquier otra cosoa saludos a todos, no he andado por aqui en mucho tiempo, pero ya me llegaron las vacaciones.

Bueno, ahce algunos meses esta intentando hacer una pequeña interface POO para windows pero haro quiero continuar.

Tengo varias interrogantes, la principal es como realcionas una instancia de las clases que estoy creando con el procedimiento de ventana. Osea, se creo un manejador para un evento, como ahcer que la instancia apripoado lo reciva.

Creo algunos controles, sucede que planeaba pasar informacion atraves de la lpParam al crear la ventanta(mediente la llamada a CreateWindowEx()), pero solo puede recuperarla desde dentro del procedimiento de ventana, o porlo menos es la unica forma que conosco. Alguien tiene una mejor idea. Me gustari sbaer que hay una funcion de la api que toma como parametro un HWND y retorna LPCREATEPARAM o algo semejante

Ademas, el procedimiento de ventana tiene un valo de retorno, deve haver alguna forma de obtenerlo, creo que eso me ayudaria.


De antemano gracias.
__________________
-> La duda adecuada es un buen comienzo <-

Última edición por arm; 04-ene-2007 a las 15:56.
arm está desconectado   Responder Citando
Antiguo 05-ene-2007, 14:30   #2 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Winapi

Si quieres hacerlo POO, siempre puedes encerrar el código GUI dentro de tus propias clases (algo como la MFC, pero más sencillo y directo a tus necesidades).

Yo hice algo así hace ya tiempo:

Código:
class window
{
    window(alto, ancho, ...);
    ~window();

private:
    void wndproc();

    friend void wndproc_wrapper();
    ...
}

void wndproc_wrapper(void *param)
{
      ((window *) param)->wndproc();
}
Algo así. Usa el wrapper para llamar a la función wndproc real de cada clase/ventana, y main() que se encargue de despachar los mensajes, etc.

Decir que no funcionaba nada mal, y era fácilmente portable...

Última edición por MaxExtreme; 05-ene-2007 a las 14:38.
MaxExtreme está desconectado   Responder Citando
Antiguo 05-ene-2007, 15:36   #3 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Re: Winapi

es una buena opcion, si.

Pero tengo mucho tiempo para encontrar una mejor, especificamente quiero que el procedimeinto de ventana llame a a funcionese de la clases (como en la mfc), en cuantos a las nececidades pues el objetivos es que sea general.

Aun que pensandolo bien es una idea sencilla y util, vere como la puedo utilizar
__________________
-> La duda adecuada es un buen comienzo <-
arm está desconectado   Responder Citando
Antiguo 05-ene-2007, 16:14   #4 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Winapi

Date cuenta de que usando esa manera no tendrás más problemas pasando punteros extraños a través de funciones de Windows, dado que, al tener tus propias clases, los datos que quieras ya los almacenas allí.

Además de aislar el código GUI-Windows no portable del código de la aplicación propiamente dicha.
MaxExtreme está desconectado   Responder Citando
Antiguo 06-ene-2007, 15:56   #5 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Re: Winapi

Pero como me deshago de los parametros para CREATESTRUCTURE, WINCLASSEX y HINSTANCE, son un dolor de cabesa. No entiendo como es que propones manejar estos tipos de datos. Puede ser un poco nas explicito.
Si pudiera sinplemente crear una ventana(sin registrarla, como con 'edit','button'...) pero aun asi asignar el procedimiento de venta seria magnifico, tienes idea de la posibilidad de esto?.
__________________
-> La duda adecuada es un buen comienzo <-
arm está desconectado   Responder Citando
Antiguo 06-ene-2007, 16:33   #6 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Winapi

No entiendo el problema específico que tienes...

Tú pones el código para crear tu ventana (CreateWindowEx() y demás), en el constructor a ser posible, pasándole los argumentos que requieras...
MaxExtreme está desconectado   Responder Citando
Antiguo 06-ene-2007, 17:32   #7 (permalink)
blackwind tiene algunos puntos positivos de karma
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.064
Re: Winapi

que tal,

si lo que estas haciendo NO es una tarea ni por mera practica......
por que no usas la MFC? si no te gusta, hay otras buenas alternativas:
WTL
wxWidgets
gtk

saludos,
blackwind está desconectado   Responder Citando
Antiguo 06-ene-2007, 18:26   #8 (permalink)
Nivel7 no se puede cailificar en este momento
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Re: Winapi

Si realmente quieres aventurarte con el API de Windows. No veo forma de des ahcerte del procedimiento de ventana que a de asignarse al puntero de la estructura de la Clase de ventana.

la forma en que puedes usarlo es como un procedimiento amigo de la clase o como un metodo estatico.
en ambos casos no podrias acceder al puntero this.

hay formas de poder obtenerlo.

una es obtenerlo directamente en el Procedimiento de ventana o usar un metodo de la clase que realice las mismas funciones del procedimiento de ventana, similar a como ha mostrado en su ejemplo MaxExtreme.

la mejor forma de obtener el puntero this es usando la funcion GetWindowLong, funcion que retorna un dato de la ventana (HWND) que pasas como parametro determinado por el indice o constante GWL_....
generalmente GWL_USERDATA.

claro antes tienes que asignar este puntero(this) a tu ventana, ya sea con SetWindowLong, si lo obtendras con GetWindowLong o en el campo lParam de una estructura MDICREATESTRUCT pasandola en el ultimo parametro de la funcionCreateWindowEx.

Las funciones GetWindowLong y SetWindowLong te seran muy utiles, y las respectivas constantes GWL_....

Saludos.
Nivel7 está desconectado   Responder Citando
Antiguo 08-ene-2007, 15:53   #9 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Re: Winapi

hola blackwind, es que la unica utilidad segura que ahora tengo en mente es la practica, dado que llo trabajo en vb y c#, pero espero que sea usable.

Hola nivel7, creo que esa es mi respuesta, es he tenido pocos ides de como solucioanar ese problema, lu estuv intetando mediante lpparam CreateWindowEx, pero solo podia obtener desde el procedimiento.
Pero bueno voy a sudiar esas funciones y luego coment como me fue.
__________________
-> La duda adecuada es un buen comienzo <-
arm está desconectado   Responder Citando
Antiguo 11-ene-2007, 15:06   #10 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Re: Winapi

Asi fue, GetWindowLong y SetWindowLong fueron sumamente utiles.
Es tan simple como comvertir el valor en un puntero y listo.

Gracias.
__________________
-> La duda adecuada es un buen comienzo <-
arm está desconectado   Responder Citando
Antiguo 04-feb-2007, 14:43   #11 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Re: Winapi

Hola, de nuevo con esta cantaleta, veran, tengo una clase que es la encargada de crear los controles como botenes y caja de texto, pero en el caso de edit, cuando se visualisa es una tira plana de fondo blanco, pero el botton se ve como estoy acostumbrado en 3D, me gustaria que me dijeran como puedo cambiar esto.

Gracias.
__________________
-> La duda adecuada es un buen comienzo <-
arm está desconectado   Responder Citando
Antiguo 05-feb-2007, 16:53   #12 (permalink)
Nivel7 no se puede cailificar en este momento
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Re: Winapi

No comprendo muy bien, pero si te refieres a que no se muestra en 3D, la verdad no estoy seguro si esta sea la solucion, pero podrias solucionarlo con WS_EX_CLIENTEDGE como estilo extendido.

intentalo.
Nivel7 está desconectado   Responder Citando
Antiguo 19-feb-2007, 13:46   #13 (permalink)
arm
arm no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Re: Winapi

Hola nivel 7 disculpa la falta de atencio.

Bueno prove lo que me dijistis me no tiene efecto.

El problema es que creo una instancia de ventana windows, espec ificamente creo una ventana edit, pero su apariencia es la de un rectangulo con fondo blanco, y yo quiero que paresca una el texbox que estoa acostumbrado a ver.
__________________
-> La duda adecuada es un buen comienzo <-
arm está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 10:27.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93