domingo, 26 de diciembre de 2010

Lección 1: Creando una Ventana con MFC

Antes que nada y a modo de introducción voy a aclarar algunas cositas: 
  • Voy a prendiendo mientras escribo este blog.
  • Todos los ejemplos son probados en Visual C++ 2010 Profesional 
  • Nada más
Ahora si, nos metemos con las MFC o Microsoft Found-no-se-que classes
La "Microsoft Foundation Classes" es una librería que "envuelve" porciones de la API de windows en clases de c++(según la wikipedia)

MFC nos provee de dos clases bastante importantes, CWinApp y CFrameWnd. CWinApp es la que posee las funcionalidades a nivel aplicación y CFrameWnd es la encargada de manejar la GUI. Ambas heredan de CCmdTarget, clase encargada de manejar el mapa de mensajes que a su ves hereda de CObject, "The principal base class for the Microsoft Foundation Class Library." según la microsoft.

 CWinApp posee una función(operación, método, como quieran llamarla) virtual ("sobre-escribible") muy importante llamada InitInstance(), encargada de la inicialización de la instancia, y un miembro m_pMainWin que es un puntero a la ventana que vamos a programar.

Ya sabiendo todo esto, empecemos con un pequeño ejemplo, generamos un nuevo proyecto "WIN32" desde el Visual Studio 2010, y seleccionamos la opción "proyecto vacío", luego creamos un archivo de codigo fuente "MFC.cpp" y copiamos lo que esta aca abajo

#define _AFXDLL
#include < afxwin.h >

class CMyFrame;
class CMyApp;

class CMyFrame:public CFrameWnd{
    friend class CMyApp;
    CMyFrame(){
      Create(NULL,"Juampi");
    }
};

class CMyApp:public CWinApp{
private:
    CMyFrame *MyFrame;
public:

    BOOL InitInstance(){
     MyFrame = new CMyFrame();
     m_pMainWnd = MyFrame;
     m_pMainWnd->ShowWindow(1);
     return true;
   }
};

CMyApp MyApp;

Seguramente va a saltar un error de compilación, para solucionarlo vamos a "Proyecto->Propiedades de ...->Propiedades de configuración->General->Juego de Caracteres y lo ponemos en "multibyte"
Ahora si podemos ver que aparece una ventana sin nada adentro y que de título dice "Juampi"