一、基本知识
1.BOOL
在WINDEF.H中定义如下:
typedef int BOOL;
2.TRUE,FALSE
在AFX.H定义如下:
#define FALSE 0
#define TRUE 1
#define NULL 0
二、简单程序(Win32模仿MFC)
新建一Win32 Application,工程名Demo
★Demo.h:
#include<afxwin.h>
class CMyApp:public CWinApp
{
public:
virtual BOOL InitInstance();//重载父类的InitInstance虚函数
};
class CMyFrameWnd:public CFrameWnd
{
protected:
afx_msg void Function1(WPARAM wParam,LPARAM lParam);//消息映射处理函数
afx_msg void Function2(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP();//声明该类处理消息映射
};
★Demo.cpp:
#include"ex43.h"
BOOL CMyApp::InitInstance() //WINDEF.H:typedef int BOOL
{
CMyFrameWnd *p=new CMyFrameWnd;
p->Create(NULL,"手动添加MFC消息映射"); //创建窗口
p->ShowWindow(this->m_nCmdShow); //显示窗口
p->UpdateWindow(); //更新窗口
this->m_pMainWnd=p; //CWinThread: public CWnd *m_pMainWnd
return TRUE; //AFX.H: #define TRUE 1
}
CMyApp theapp;//应用程序全局对象
//
BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd) //消息映射处理顺序: //(CFrameWnd子类, CFrameWnd类)
ON_MESSAGE(WM_LBUTTONDOWN,Function1)
ON_MESSAGE(WM_RBUTTONDOWN,Function2)
END_MESSAGE_MAP()
void CMyFrameWnd::Function1(WPARAM wParam,LPARAM lParam)
{
MessageBox("左键被按下!");
}
void CMyFrameWnd::Function2(WPARAM wParam,LPARAM lParam)
{
MessageBox("右键被按下!");
}
执行程序前,在Project->Settings中,选择Use MFC in a Static Library 或Use MFC in a Shared DLL
解析:
1.继承关系
CMyApp->CWinApp->CWinThread->CCmdTarget->CObject
其中m_pMainWnd是CWinThread类中定义的public成员变量
class CWinThread : public CCmdTarget
{
public:
CWnd* m_pMainWnd;
};
2.消息处理
在类中声明
DECLARE_MESSAGE_MAP();
afx_msg 返回值类型 消息处理函数(WPARAM wParam,LPARAM lParam);
afx_msg:一个标识,为空,可以省去,其定义如下:
#ifndef afx_msg
#define afx_msg // intentional placeholder
#endif
实现:
BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)
ON_MESSAGE(WM_LBUTTONDOWN,Function1)//格式:ON_MESSAGE(消息,消息处理函数)
ON_MESSAGE(WM_RBUTTONDOWN,Function2)
END_MESSAGE_MAP()
void CMyFrameWnd::Function1(WPARAM wParam,LPARAM lParam)
{
MessageBox("左键被按下!");
}
默认消息映射:
ON_WM_LBUTTONDOWN() (ON_消息标识符)
默认预定义消息处理函数:
OnLButtonDown(UINT nFlags,CPoint point)