1 消息映射->不使用继承而使用宏定义的处理消息的函数on系列
消息映射好像一个子函数
逻辑过程是在类申明消息映射:
DECLARE_MESSAGE_MAP();//申明消息映射
申明之后当然是实现啦:
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd);//处理哪一个窗口?继承谁
ON_WM_PAINT();
END_MESSAGE_MAP()
那处理处理哪一个消息??:例如绘制
WM_PAINT 消息 WM表示是表示系统传入消息,ON表示映射
当然接收一个消息,必须函数申明与定义:
afx_msg void OnPaint();
然后是对每一个消息进行申明处理
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP();//申明消息映射
#include"myapp.h"
MyApp myapp;
BOOL MyApp::InitInstance()//::并且是继承的虚函数构造函数
{
this->m_pMainWnd = new MyFrame();//既然是指针就必须new 一段内存
//应用程序对象成员变量m_pMainWnd是一个窗口指针,即主窗口的指针。
//初始化实例时创建N多个窗口,而只有这个指针指向的才是主窗口
this->m_pMainWnd->ShowWindow(this->m_nCmdShow);//类似函数this Fun(this varibal)
//m表示CWinApp的数据成员变量,'_'是一个命名的规则,方便阅读,n表int型,Cmd表命令Show表示应用程序窗口
//的表现状态,如传递窗口的最大化或最小化...
this->m_pMainWnd->UpdateWindow();
return TRUE;//全大写的TRUE
}
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd) //没有冒号
ON_WM_PAINT()
END_MESSAGE_MAP()
MyFrame::MyFrame()
{
this->Create(NULL, TEXT("my"));
//http://heduoduo321.blog.163.com/blog/static/657211222011279282841/
}
void MyFrame::OnPaint()//记住函数必须有类型void
{
CPaintDC dc(this);//著名的DC,所有窗口都是绘制出来的
//把当前的窗口传进去绘制
//CPaintDC类是一个来自CDC的设备环境类。相当于显示器。
dc.Ellipse(100, 100, 200, 300);
//学习如何画椭圆与画文字
CRect crect; //申请一块方框
this->GetClientRect(&crect);//我的框架里面拿到这个窗口
//CPaintDC dc(this);通过this 与窗口框架关联,窗口内部客户区
//&是引用
dc.DrawText(TEXT("addddd"),-1, &crect,
DT_SINGLELINE|DT_CENTER|DT_VCENTER);//符号是|
//第一个是绘制内容,-1文字字数,绘制哪里,一行,左右居中,V居中
}
#include <afxwin.h> //MFC的头文件
class MyApp : public CWinApp //类的继承
{
public:
virtual BOOL InitInstance();//避免多层继承virtual
};//结束;BOOL是大写
class MyFrame : public CFrameWnd
{
public:
MyFrame();//构造函数与子类一样
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP();//申明消息映射
};