Ver Mensaje Individual
  #11 (permalink)  
Antiguo 01/09/2006, 21:04
Nivel7
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
No, no lo creo.

Una cosa es el manejo de mensajes y otra lo relacionado con el area cliente, y si, en realidad programar con el API es super complejo, y todo se encuentra en funciones de las DLLs. jeje
C++ a diferencia de otros lenguajes incluye ya un SDK listo para usarse con loas funciones del API, es por eso que no eres tu quien lo tienen que hacer como en VB u tros lenguajes.

pero si tu quisieras podrias hacerlo, por ejemplo, si quieres agregar funciones del SDK de Windows Vista pues lo tendrias que hacer tu mismo.

por ejemplo:

extern "C" __declspec(dllimport) LONG CreateVistaDialog(HWND, HINSTANCE, LPSTR, INT);

//la funcion en realidad no existe es solo un ejemplo;

ya con esta definicion ya la puedes usar.

si quieres puedes revisar los encabezados, por ejemplo winuser.h
ahi veras como se invocan las funciones del API.

las ventanas de windows tienen un manipulador Handle, que no es un puntero a una estructura, sino un entero producto de un Hash(Supongo) con la verdadera direccion de la estructura que describe a una ventana.

es atraves de este manipulador que window se comunica con las ventanas y entre ellas.

la estructura MSG, es la encargada de recoger los mensajes de la cola de Mensajes de Windows,

se hace con GetMessage(&msg, 0, 0, 0);
esta funcion se encarga de almacenar en la estructura MSG el manipulador, las coordenadas del raton entre otros datos, para que el Procedimiento de ventana puede hacer su trabajo.

el Procedimiento de ventana es invokado a traves del puntero en la estructura WNDCLASSEX, por la Funcion:
DispatchMessage(&msg);

imagino que lo primero que hace es obtener el puntero al Procedimiento de ventana a travez del manipulador contenido en MSG.
por ejemplo;

void DispatchMessage(MSG *msg)
{
WNDPROC procedure = (WNDPROC)GetWindowLong(msg->hwnd, GWL_WNDPROC);
CallWindowProc(procedure, hwnd, msg, msg.wParam, msg.lParam);
}

es tan solo un ejemplo de lo que realmente hace esta funcion.

TranslateMessage(), tan solo se encarga de convertir el codigo de formato del teclado en codigo ASCII o UNICODE segun sea.

la forma de seleccionar el manipulador correcto puede hacerlo de 2 formas a traves de la pocision del rato, o por la posicion del Foco.

ahora, la ventana no solo esta conformada por el area cliente, tambien cuenta con un area llamada Area no Cliente.
El Area Cliente es aqulla que sera otorgada por el sistema patra que tu puedas crear tu aplicacion(Dibujar).
y el area no cliente generalmente solo el SO, puede acceder a elLa(Aun que puedes acceder con un poco mas de trabajo), para dibujar el estilo de ventana, los controles de Max,Min,Close, Help, ect.

Como podras ver un boton o cualquier otro control es una ventana, sin caption, ni borde, su procedimiento de ventana de BUTTON, por ejemplo es el que se encarga de Dibujar en el area cliente de la ventana BUTTON, la forma de un PUSHBUTTON, y su comportamiento respectivo.

hay otros controles que estan conformados por dos o mas ventanas, por ejemplo el ComboBox.


En fin como podras ver es un tema super extenso, poco a poco iras aprendiendo sobre el WINAPI.

Saludos.

Última edición por Nivel7; 01/09/2006 a las 21:16