MFC中的多文档程序 C函数名View类的OnDraw函数

作者&投稿:良烟 (若有异议请与网页底部的电邮联系)
MFC 自动生成这几个类都是啥意思~

LZ需要系统地学习一下。

CTestApp是基于WinApp的,WinApp封装了程序的主入口WinMain,WinMain就和c语言的main函数地位一样,是Win32程序的入口。在MFC的封装中,一个程序启动,Windows调用WinMain,这个WinMain函数现在由MFC事先写好藏好了,你不能也不需要修改,在这个预定义的WinMain里面会调用CWinApp的InitInstrance函数。

你仔细看你CTestApp::InitInstrance函数,在这里一个CMainFrame的对象被创建,文档模板被创建,主窗口通过ShowWindow(SW_SHOW)被显示出来。

CMainFrame是个框架,是你整个应用程序的主窗口,他负责管理应用程序的菜单,工具栏,状态栏等。中间的区域,成为客户区,由View类来管理,View类也是一个窗口,他是MainFrame的子窗口。

OnDraw函数负责绘制客户区的内容,该函数会被多次调用,他可以被你自己调用,比如你调用View类的UpdateWindow,或者在Document类中调用UpdateAllViews等等,MFC自动会调用OnDraw。

他还会被Windows调用,Windows在需要刷新窗口的时候发送给窗口WM_PAINT消息,MFC事先已经预定义了,在响应WM_PAINT消息的时候会调用OnDraw。

何时Windows会发送WM_PAINT呢,比如窗口从最小化还原,比如窗口被用户改变了大小等等。这部分内容最好看看Windows GDI,Windows GDI是Windows操作系统整个可视化界面的基础。

然后你最后一个问题,何时才能被播放音乐。你仔细想想就容易得到答案了,整个程序从App类的InitInstrance开始,在InitInstrance里面创建了MainFrame,这时候MainFrame的PreCreateWindow, OnCreate, OnCreateClient就会按照上述顺序被调用,在OnCreateClient中,视图类会被创建,视图类的PreCreateWindow和OnCreate会按上述顺序调用,当视图创建之后,视图类的OnInitialUpdate会被调用,作为视图类一次性的初始化。之后程序进入等待用户操作的状态,在需要刷新的时候,OnDraw会被调用。

在关闭应用程序的时候,用户单击窗口右上角的关闭按钮,Windows就发送WM_CLOSE给窗口,MFC中相应WM_CLOSE的函数是OnClose,在OnClose中,QueryEndSession被调用,如果文档有变化,则会询问用户是否要保存文档,如果保存,则调用文档类的Serilize函数对文档进行保存操作,如果不保存就继续关闭。这时候OnDestroy被调用,窗口在这里被销毁。
主进程App类会受到WM_QUIT消息,这是ExitInstrance被调用,最后整个程序被结束。

如果你想清楚了这个主线,你自己就可以决定你需要在哪里播放音乐了。

ondraw有很多的消息都可以触发,你可以自定义一个函数,函数让ondraw调用,给一个变量来标识是否允许自定义函数执行,比如

void Fun
{
if(flag)

{

//do something

}

}
你自己控制flag来实现你的要求

MFC创建工程时,默认会创建这两个函数,默认创建不做修改肯定会有的

CView类

hh