lunes, 27 de diciembre de 2010

Lección 2: El Message Map...

O al menos parte de él, esto es lo poco que pude aprender hasta el momento.
Resulta que como en el API de windows tenemos un bucle de mensajes aca tenemos un Mapa de Mensajes, son en esencia lo mismo -eso creo- aunque poseen algunas diferencias.
En primer lugar existen unas macro como DECLARE_MESAGE_MAP(), BEGIN_MESSAGE_MAP(...) y END_MESSAGE_MAP() necesarias para poder manejar todo el tema de los eventos.
  • DECLARE_MESAGE_MAP()debe declararse al final de nuestra clase que hereda de CFrameWnd(en el tutorial sería CMyFrame).
  •  BEGIN_MESSAGE_MAP(...) recive dos parámetros, en el primero se debe mandar CMyFrame y en el segundo la clase padre de CMyFrame, es decir CFrameWnd y es la encargada de iniciar la definición del mapa de mensajes.
  • Por último, tenemos END_MESSAGE_MAP(), no tiene parámetros, y es la encargada de terminar la definición del mapa de mensajes.
Ya con estos puntos resumidos pasemos a un ejemplo bien sencillo:

#define _AFXDLL
#include < afxwin.h >

class CMyFrame;
class CMyApp;

class CMyFrame : public CFrameWnd{
friend class CMyApp;
public:
   CMyFrame(){Create(NULL, "Juampi");}
   void OnLButtonDown (UINT nFlags, CPoint Point);
   void OnRButtonDown (UINT nFlags, CPoint Point);
   DECLARE_MESSAGE_MAP() //sin ; ni nada, asi nomas como esta
};

BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd)
   ON_WM_LBUTTONDOWN()
   ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()

void CMyFrame::OnLButtonDown(UINT nFlags, CPoint Point){
/*Aca metemos el código de lo que queremos que pase cuando apretamos el boton izquierdo del mouse sobre nuestra ventana*/
MessageBox("Izquierdo");
}

void CMyFrame::OnRButtonDown(UINT nFlags, CPoint Point){
/*Aca metemos el código de lo que queremos que pase cuando apretamos el boton derecho del mouse sobre nuestra ventana*/
MessageBox("Derecho");
}

class CMyApp: public CWinApp{
private:
   CMyFrame *MyFrame;
public:
   BOOL InitInstance(){
      MyFrame = new CMyFrame;
      m_ pMainWnd = MyFrame;
      m_pMainWnd->ShowWindow(1)
      return true;
   }
};

CMyApp MyApp;

Si mi lógica no me falla, esto tendría que hacer que cuando apretemos el boton izquierdo sobre la ventana nos aparezca un mensaje que dice "Izquierdo" y si apretamos el derecho, el mensaje dirá "Derecho"

No hay comentarios:

Publicar un comentario