学习过很多语言以及环境,对于Java、C++、Qt等都很容易理解,并且能很快上手做项目,唯独对MFC一直浑浑噩噩,不太清楚,参与项目总是独立负责一块,与业务逻辑更相关,用std库的机会多,与GUI、Doc/View打交道的时间少,没有对其进行系统地学习。现在独立完成项目,各方面都要清楚,尤其觉得MFC是自己的一个短板,更觉得有系统一学的必要。
一、用MFC创建窗口
MFC的目的是减轻程序员的工作量,让程序员专注于程序的逻辑而非一堆离散的SDK函数,其主要作用是将绝大部分常用的函数包装好,提供一个完整的框架。在MFC中,有两个类最为重要,一个是CWinApp,另一个是CFrameWnd ,前者负责实现应用级别的功能,后则实现GUI相关的功能。
MFC中的所有类都继承与CCmdTarget,CCmdTarget类都具有处理消息映射中的消息的能力(即能处理windows消息)。在CWinApp中,一个重要的重载函数是InitInstance,它负责窗口的创建;它还有一个重要的数据成员m_pMainWnd,它是指向窗口的指针。
以下我们用CWinApp和CFrameWnd两个类构建一个window是程序,(新建一个Win32空项目,添加如下代码的文件)其代码如下所示:
#include <afxwin.h>class MFC_Tutorial_Window: public CFrameWnd
{
public:MFC_Tutorial_Window(){Create(NULL, "MFC Tutorial");}
};class MyApp: public CWinApp
{MFC_Tutorial_Window *wnd;
public:BOOL InitInstance(){wnd = new MFC_Tutorial_Window();m_pMainWnd = wnd;m_pMainWnd->ShowWindow(1);return 1;}
};MyApp theApp;
然后选择project->setting->General->using MFC in a shared dll
二、消息映射
继承自CCmdTarget的类均具有处理windows消息的能力,MFC提供了一中消息映射的机制,即每个集成自CCmdTarget的类均可声明自己处理的消息,下面通过简单的实例说明MFC中消息映射的实现方式。
#include <afxwin.h>class MFC_Tutorial_Window :public CFrameWnd
{
public:MFC_Tutorial_Window(){Create(NULL,"MFC Tutorial Part 2 CoderSource Window");}void OnLButtonDown(UINT nFlags, CPoint point);DECLARE_MESSAGE_MAP() // 说明MFC_Tutorial_Window会处理相关window是消息
};BEGIN_MESSAGE_MAP( MFC_Tutorial_Window, CFrameWnd) // 定义MFC_Tutorial_Window中的消息映射,MFC_Tutorial_Window是CFrameWnd的子类,声明事件处理链ON_WM_LBUTTONDOWN() //Macro to map the left button click to the handler // 如果在此声明的消息在MFC_Tutorial_Window中没有提供消息处理函数,则在CFrameWnd中寻找
END_MESSAGE_MAP()void MFC_Tutorial_Window::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call defaultCFrameWnd::OnLButtonDown(nFlags, point);MessageBox("Left Button clicked");
}class MyApp :public CWinApp
{MFC_Tutorial_Window *wnd;?
public:BOOL InitInstance(){wnd = new MFC_Tutorial_Window();m_pMainWnd = wnd;m_pMainWnd->ShowWindow(1);return 1;}
};MyApp theApp;
转载于:https://www.cnblogs.com/YukiJohnson/archive/2013/01/05/2846765.html