MFC学习一

什么是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; 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值