Rodrigo Strauss :: Blog
Explicando a sopa de letrinhas da programação C/C++ para Windows: MFC
Outros posts dessa mesma série: Win32 COM ATL
MFC: A Microsoft Foundation Classes é um framework e uma biblioteca de classes C++ que encapsula grande parte da API Win32. Ela foi criada pela Microsoft para facilitar a programação em Win32 usando C++, já que a API Win32 é exportada como funções C. Ela é um framework no sentido de que todos os aplicativos MFC devem "se encaixar" nesse framework de alguma forma, seguindo certos requisitos. Ela não foi feita para ser incluída em um projeto só para usar algumas classes, como é o caso do WTL (eu falarei de WTL em outro post).
Como um trecho de código vale mais do que 2 + 2 palavras, vamos à ele:
#include <afxwin.h> // // Minha janela principal // class CMyWindow : public CFrameWnd { private: CButton m_btnTest; DECLARE_MESSAGE_MAP(); public: // // essa função não é da MFC, eu a criei para inicializar meus // controles daqui // BOOL InitializeControls() { m_btnTest.Create("blah",BS_PUSHBUTTON , CRect(10,10,100,60),this, 1); m_btnTest.ShowWindow(SW_SHOW); return TRUE; } // // função que trata o evento de clique do botão // LRESULT OnButtonTestClick() { AfxMessageBox("button click!"); return 0; } // // evento de duplo click // LRESULT OnLButtonDblClk(UINT, CPoint) { AfxMessageBox("dbl click!"); return 0; } // // evento de resize // LRESULT OnSize(UINT nType, int cx, int cy) { CString str; // // vamos colocar a nova altura e largura como título // da janela // str.Format("largura: %d, altura:%d", cx, cy); SetWindowText(str); return 0; } }; // // mapa de mensagens da classe CMyWindow // aqui colocamos de modo declarativo qual evento será // tratado por qual função // BEGIN_MESSAGE_MAP(CMyWindow, CFrameWnd) ON_BN_CLICKED(1, OnButtonTestClick) ON_WM_LBUTTONDBLCLK() ON_WM_SIZE() END_MESSAGE_MAP( ) // // classe que representa a aplicação em si, // herda de CWinApp // class CMyApp : public CWinApp { // // Função chamada pela MFC assim que o aplicativo é // inicializado. Coloque aqui o que seria colocado // no WinMain // BOOL InitInstance() { CMyWindow* pMyWindow = new CMyWindow; // // vamos criar nossa janela e mostrá-la // pMyWindow->Create(NULL, "www.1bit.com.br"); pMyWindow->InitializeControls(); pMyWindow->ShowWindow(SW_SHOW); pMyWindow->UpdateWindow(); m_pMainWnd = pMyWindow; return TRUE; } }; CMyApp theApp;
A MFC é a principal biblioteca de classes para C++ da Microsoft. Ela vem junto com o Visual C++, e a IDE tem total suporte para ela, facilitando a nossa vida com wizards e "clique com o botão direito e...". Fazer um "Dialog Application" usando MFC e o Visual C++ é quase tão fácil quanto fazer um programa em VB (meus alunos de C++ disseram isso). Como no VB, você desenha um botão visualmente, dá um duplo clique no botão criado e a MFC cria um handler para o evento de clique do botão. Além disso, a MFC contém diversas macros e funções para associar variáveis com controles Win32. Esse recurso é chamado de DDX, e é muito útil para formulários cheios de CheckBoxes e TextBoxes. Eu acho esse um dos recursos mais úteis da MFC, e reduz bastante o tempo de desenvolvimento de programas com essas características.
A MFC também tem suporte à bancos de dados ODBC ou OLEDB. No caso de OLEDB, um wizard cria classes com propriedades (variáveis membro) equivalentes aos campos do banco de dados. Mas o grande destaque da MFC é "Document/View Model", que provê um framework para aplicativos que usam o conceito de documento (como o Word, CorelDRAW!, etc). Junto com o suporte a serialização, fica bem mais fácil fazer um aplicativo de edição de documentos com open/save, área de transferência e várias views de um mesmo documento.
A MFC é bastante criticada por não usar recursos modernos do C++ e não ser totalmente type-safe. Apesar das melhorias no quesito type-safe a partir da MFC 7, as críticas ainda persistem. Apesar de tudo isso, a MFC ainda é muito usada, e é possível achar muita informação sobre ela na Internet.
A literatura é vasta e existem diversos sites com seções especializadas em MFC (como o Code Project e o Code Guru). Muitas empresas (inclusive brasileiras) desenvolvem aplicativos em MFC, e a finada certificação "Developing Desktop Applications Using Microsoft Visual C++" era toda sobre MFC.
Usando a MFC você tem a opção de fazer um link estático com a MFC ou usar a MFC em uma DLL (de aproximadamente 1 MB). No exemplo de código acima, o link estático fez o executável ficar com 100kb a mais, mas eu já vi casos onde o executável fica 300kb maior - o que em muitas situações é desprezível.
Mais informações
Documentação da MFC na MSDN
Hierarquia de classes da MFC
Code Project
Livros sobre MFC na Amazon
Em 23/08/2005 17:51, por Rodrigo Strauss





Gostaria que voçês me mandasem um e mail falando mais sore programação em c c++.