MFC消息映射-小白理解(4)

来源:互联网 发布:java类的定义格式 编辑:程序博客网 时间:2024/06/15 15:22

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();//申明消息映射}; 

原创粉丝点击