MFC初步教程(一)

       学习过很多语言以及环境,对于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 default
   CFrameWnd::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;

 

posted @ 2013-01-05 21:33  iosJohnson  阅读(1554)  评论(0编辑  收藏  举报