OnCreate 函数的说明

本文详细解析了MFC框架中OnCreate与OnDraw两个关键函数的区别与应用场景,阐述了如何正确地使用这两个函数,避免在开发过程中出现的常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百科:

OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。

 

  在view类中,Create 是虚函数由框架调用,是用来“生成一个窗口的子窗口”。 而OnCreate 函数是用来“表示一个窗口正在生成”。

 

  一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。因为在MFC里面用一种消息映射的机制来响应消息,也就是可以用函数来响应相应的消息。就拿CMainFrame类来说,当窗口创建后会产生WM_CREATE消息,我们可以在OnCreate函数里实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。这些子窗口一般是定义成类中的一个成员变量,因为要保证生命周期。一般以m_开头来表示成员(member)。

 

  OnCreate()不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置等,Create()负责注册并产生窗口

 

  Create()不是对应于消息WM_CREATE的,OnCreate()才是。Create()只用于产生窗口,像动态创建控件中的Create()一样。

 

 

 

 

 

关于OnCreate和OnDraw

 

 

初学MFC 
  刚开始,我在view类中的OnCreate()中写了一段向窗口中插入一个光标的代码,一切正常,然后又在OnDraw()中写了一段想窗口中插入一段字符的代码,也一切正常,但当我把这两个东西颠倒过来,也就是在OnCreate()中写插入一段字符的时候,运行是根本看不到效果,而在OnDraw()中写插入光标的时候,当我用鼠标改变窗口的大小的时候,程序就爆掉了,请问这是为什么?

 

  首先你熟悉OnCreate()和OnDraw()函数的作用和用法,才能正确使用下面是他们的用法:
  OnCreate()是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。在view类中,Create 是虚函数由框架调用,是用来“生成一个窗口的子窗口”。 而OnCreate 函数是用来“表示一个窗口正在生成”。一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。因为在MFC里面用一种消息映射的机制来响应消息,也就是可以用函数来响应相应的消息。就拿CMainFrame类来说,当窗口创建后会产生WM_CREATE消息,我们可以在OnCreate函数里实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。这些子窗口一般是定义成类中的一个成员变量,因为要保证生命周期。一般以m_开头来表示成员(member)。OnCreate()不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置等,Create()负责注册并产生窗口
      OnDraw()函数每当窗口发生重绘时就会执行,它其实跟消息处理函数OnPaint()差不多。当在View类里添加了消息处理函数OnPaint()时,OnPaint()就会覆盖掉OnDraw()。
     用鼠标改变窗口的大小的时候,程序就爆掉这个应该是窗口重绘是有异常,有是编译程序是警告是不能忽略的,看看有什么警告把警告处理了。希望对你有所帮助!
在读取图片的框架搭建中使用了MFC(Microsoft Foundation Classes)框架中 CMainFrame 类的实现代码。 MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC实际上就是由微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。 界面算法流程概述: 1. 使用了MFC 框架下的主窗口类 CMainFrame的构造函数和创建窗口的函数。在构造函数中并没有做什么特别的事情,只有一个 TODO 注释。在 OnCreate 函数中,创建了一个工具栏和一个状态栏,并加载了资源文件中的工具栏和状态栏的图标和文本。如果创建失败,则会返回 -1。 2. 实现MFC 框架中主窗口类 CMainFrame。其中,OnCreate函数在主窗口被创建后被调用,OnCreate函数启用了主窗口的 docking 功能,并将工具栏固定到窗口顶部。而 PreCreateWindow() 函数则是在主窗口被创建前被调用,它可以修改主窗口的样式和属性。在这段代码中,PreCreateWindow() 函数并没有做任何修改,只是简单地返回 TRUE,表示主窗口可以被创建。 3. 运用了MFC 框架中 CImageProcessingApp 类的消息映射表,其中定义了两个命令的消息处理函数:OnAppAbout和 OnFileOpen。同时也继承了 CWinApp 中定义的三个命令:OnFileNew、OnFileOpen 和 OnFilePrintSetup 的消息处理函数。这些消息处理函数将在相应的命令被触发时被调用,可以在其中编写相应的处理代码。 4. 在 MFC 应用程序中启用 3D 控件。在 MFC 应用程序中,如果使用共享 DLL,则应调用 Enable3dControls()。但如果使用静态链接,则应调用 Enable3dControlsStatic()。_AFXDLL是一个预处理器宏,用于指示 MFC 应用程序是使用共享 DLL 还是静态链接 MFC 库。如果定义了 _AFXDLL,则表示使用共享 DLL。如果未定义 _AFXDLL,则表
最新发布
05-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值