Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Winapi

Estas en el tema de Winapi en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/01/2007, 16:23
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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/01/2007 a las 16:56
  #2 (permalink)  
Antiguo 05/01/2007, 15:30
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
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/01/2007 a las 15:38
  #3 (permalink)  
Antiguo 05/01/2007, 16:36
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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 <-
  #4 (permalink)  
Antiguo 05/01/2007, 17:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
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.
  #5 (permalink)  
Antiguo 06/01/2007, 16:56
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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 <-
  #6 (permalink)  
Antiguo 06/01/2007, 17:33
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
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...
  #7 (permalink)  
Antiguo 06/01/2007, 18:32
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
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,
  #8 (permalink)  
Antiguo 06/01/2007, 19:26
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
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.
  #9 (permalink)  
Antiguo 08/01/2007, 16:53
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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 <-
  #10 (permalink)  
Antiguo 11/01/2007, 16:06
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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 <-
  #11 (permalink)  
Antiguo 04/02/2007, 15:43
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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 <-
  #12 (permalink)  
Antiguo 05/02/2007, 17:53
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
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.
  #13 (permalink)  
Antiguo 19/02/2007, 14:46
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
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 <-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.