什么是MFC?
MFC(Microsoft Foundation Classes),是一个微软公司提供的类集合。
基本MFC类结构:
CObject--CCmdTarget--{CWinThread--CWinApp;CWnd--{CFrameWnd;CView;CControlBar};CDocument;CDocTemplate}
CObject:MFC的基类,其中封装定义了一些基本的属性、函数、宏定义等
CCmdTarget:MFC中关于命令接收、发送等相关的类定义
CWinThread:MFC中线程相关类,每一个MFC程序都是一个线程,如我们经常用到的CWinApp类
CWnd:MFC中显示相关类,包括CFrameWnd(窗口)、CView(视窗)、CControlBar(控件)
CDocument:文档相关类,经常与CDocTemplate、CView等结合使用
CDocTemplate:文档模板类,把相关的文档(CDocument)、视图(CView)及窗口(CFrameWnd)结合起来构成一个模板
基本MFC组成
CWinApp类:MFC程序类,实现程序的初始化以及各种功能实现。
CFrameWnd类:MFC窗口类,实现程序主体窗口显示。
以上两个类作为MFC程序必不可少的两个元素,在一个MFC程序中,须要创建一个CWinApp或其派生类的对象实例,而在CWinApp对象中,也必然存在着一个CFrameWnd或其派生类对象实例来显示程序窗口。
一个简单的例子:
1、在头文件中定义了一个窗口类(CWnd)和一个程序类(CWinApp)
class CMyWinApp : public CWinApp
{
public:
virtual BOOL InitInstance(); //CWinApp类必需重写的方法之一,初始化
virtual BOOL OnIdle(LONG lCount); //空闲时处理方法,CWinApp类必需重写的方法之一
};
class CMyFrameWnd : public CFrameWnd
{
public:
CMyFrameWnd(); // constructor
afx_msg void OnPaint(); // for WM_PAINT
void IdleTimeHandler(LONG lCount); // we want it call by CMyWinApp::OnIdle
private:
DECLARE_MESSAGE_MAP() // Declare Message Map
static VOID CALLBACK LineDDACallback(int,int,LPARAM);
};
2、在源文件中定义这两个类的具体实现
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
//创建窗口
Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,NULL, NULL);
}
//定义消息映射
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
//定义窗口绘制
void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(rect);
dc.SetTextAlign(TA_BOTTOM | TA_CENTER);
}
BOOL CMyWinApp::OnIdle(LONG lCount)
{
return TRUE;
}
3、在源文件中创建程序对象实例,当程序运行时,编译系统会直接调用该对象
CMyWinApp theApp;