CWnd类有没有类似CView类的OnInitialUpdate函数?

Howard-Lu 2013-08-06 10:25:58
我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
...全文
175 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsnry 2013-08-06
  • 打赏
  • 举报
回复
引用 6 楼 zeroLusta 的回复:
[quote=引用 4 楼 bsnry 的回复:] [quote=引用 2 楼 zeroLusta 的回复:] [quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote]
引用 3 楼 akirya 的回复:
[quote=引用 2 楼 zeroLusta 的回复:] [quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote] 先执行基类的OnCreate操作,然后再写自己的代码。[/quote] 没有听说oncreate还没有创建完毕窗口? The CWnd object receives this call after the window is created but before it becomes visible. OnCreate is called before the Create or CreateEx member function returns. Override this member function to perform any needed initialization of a derived class. 对应sdk,是 createwindow或者createwindowex函数后,会发出这个消息, case wm_create: { //初始化,创建你的其他子控件,均是可以的。 } break; 另外,可以也可以presubclasswindow里, 这个是mfc里的毕竟之路。 无论是单文档,多文档,还是对话框工程,均会经过 presubclasswindows里 [/quote] 多谢指教,已经做好了[/quote] 另外,可以也可以presubclasswindow里, 这个是mfc里的毕竟之路。 无论是单文档,多文档,还是对话框工程,均会经过 presubclasswindows里 这几句无视, 这里我也是看网上的说法, 没深入研究过 这个函数是个虚函数,不是消息
Howard-Lu 2013-08-06
  • 打赏
  • 举报
回复
引用 4 楼 bsnry 的回复:
[quote=引用 2 楼 zeroLusta 的回复:] [quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote]
引用 3 楼 akirya 的回复:
[quote=引用 2 楼 zeroLusta 的回复:] [quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote] 先执行基类的OnCreate操作,然后再写自己的代码。[/quote] 没有听说oncreate还没有创建完毕窗口? The CWnd object receives this call after the window is created but before it becomes visible. OnCreate is called before the Create or CreateEx member function returns. Override this member function to perform any needed initialization of a derived class. 对应sdk,是 createwindow或者createwindowex函数后,会发出这个消息, case wm_create: { //初始化,创建你的其他子控件,均是可以的。 } break; 另外,可以也可以presubclasswindow里, 这个是mfc里的毕竟之路。 无论是单文档,多文档,还是对话框工程,均会经过 presubclasswindows里 [/quote] 多谢指教,已经做好了
Howard-Lu 2013-08-06
  • 打赏
  • 举报
回复
引用 3 楼 akirya 的回复:
[quote=引用 2 楼 zeroLusta 的回复:] [quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote] 先执行基类的OnCreate操作,然后再写自己的代码。[/quote] 这样做可以,多谢。
bsnry 2013-08-06
  • 打赏
  • 举报
回复
引用 2 楼 zeroLusta 的回复:
[quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote]
引用 3 楼 akirya 的回复:
[quote=引用 2 楼 zeroLusta 的回复:] [quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote] 先执行基类的OnCreate操作,然后再写自己的代码。[/quote] 没有听说oncreate还没有创建完毕窗口? The CWnd object receives this call after the window is created but before it becomes visible. OnCreate is called before the Create or CreateEx member function returns. Override this member function to perform any needed initialization of a derived class. 对应sdk,是 createwindow或者createwindowex函数后,会发出这个消息, case wm_create: { //初始化,创建你的其他子控件,均是可以的。 } break; 另外,可以也可以presubclasswindow里, 这个是mfc里的毕竟之路。 无论是单文档,多文档,还是对话框工程,均会经过 presubclasswindows里
  • 打赏
  • 举报
回复
引用 2 楼 zeroLusta 的回复:
[quote=引用 1 楼 bsnry 的回复:] [quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。[/quote] 先执行基类的OnCreate操作,然后再写自己的代码。
Howard-Lu 2013-08-06
  • 打赏
  • 举报
回复
引用 1 楼 bsnry 的回复:
[quote=引用 楼主 zeroLusta 的回复:] 我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数? [/quote] 我有一个疑问就是,OnCreate本身是用来创建窗体的,写在OnCreate里面的代码,是否一定是在窗体完全创建好了之后再调用的呢?如果OnCreate执行时窗体没有创建完成,怕出错。
bsnry 2013-08-06
  • 打赏
  • 举报
回复
引用 楼主 zeroLusta 的回复:
我现在用CWnd类OnPaint绘图(因为不是文档/视图架构),但是在初始化的时候发现CWnd类并没有OnInitialUpdate这样的函数在第一次绘图之前被调用,所以一些初始化工作不知道放在哪里合适。最好是类似OnInitialUpdate一样,在OnCreate之后,绘图之前,这样不容易出错。
就是这个在oncreate里啊, 有人知道还有其他函数?
FC常用及其成员函数 CRuntimeClass结构 在CRuntimeClass结构中定义了名、对象所占存储空间的大小、的版本号等成员变量及动态创建对象、派生关系判断等成员函数。每一个从CObject派生的都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基的信息。 要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时型识别的MFC宏。 CCmdTarget (1)消息发送 MFC应用程序为每个CCmdTarget派生创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。 (2)设置光标 BeginWaitCursor() 将光标改为沙漏形状; EndWaitCursor() 将光标改回到之前的形状; RestoreWaitCursor()用于将光标还原为等待状态。 (3)支持自动化 CCmdTarget支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。 CWinThread 由CCmdTarget派生,主要工作是创建和处理消息循环。 CWinApp 从CWinThread派生,成员函数InitApplication()、InitInstance()、Run()。 在InitInstance()函数中,创建了一个单文档模板或多文档模板(CDocTemplate)的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档对象,框架窗口对象和视图对象. 在MFC应用程序中有且仅有一个CWinApp派生的对象,代表程序运行的主线程,代表应用程序本身。 CWnd 由CCmdTarget直接派生,是MFC中最基本的GUI对象。公共变量m_hWnd用于存放供API函数调用的窗口句柄。 CframeWndCWnd派生而来,主要用来掌管一个窗口。其对象是一个框架窗口,包括边界、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。常用成员函数: GetActiveDocument():得到当前文档的指针。 GetActiveView(): 得到当前视图的指针。 SetActiveView(): 激活一个视图。 GetTitle(): 得到框架窗口的标题。 SetTitle(): 设置框架窗口的标题。 SetMessageText(): 设置状态栏文本。 CDocument 从CCmdTarget派生,作为用户文档的基,代表了用户存储或打开一个文件。主要功能是把对数据的处理从对用户的界面处理中分离出来,同时提供一个与视图交互的接口。常用的成员函数有: OnNewDocument(): 建立新文档。 OnOpenDocument(): 打开一个文档。 OnCloseDocument(): 关闭文档。 OnSaveDocument(): 保存文档。 UpdateAllView(): 通知所有视图文档被修改。 SaveModified(): 设置文档修改标志。 CViewCWnd派生而来,是MFC视图和用户视图的基CWnd::Invalidate()或CWnd::InvalidateRect()可以刷新视图。常用函数有: GetDocument(): 视图对象访问文档对象中的数据的. OnDraw(): 这个函数有一个指向CDC的指针参数, 通过它可能直接调用CDC上显示数据和图形. 在应用程序窗口出现在及大小发生变化时, 系统将自动调用OnDraw函数 OnInitialUpdate(): 作一些初始化工作. 程序员的主要工作 (1) 重写WinApp派生的虚函数InitInstance.在这个函数中,按自己的需要创建和显示窗口. (2) 在CDocument的派生中,声明程序所需的数据和对这些数据进行必要操作的接口函数. (3) 在CViwe的派生中编写处理消息的代码.如果在消息处理中需要文档的数据,应该调用该的成员函数GetDocument来获取文档对象,然后通过文档对象的接口函数对文档中的数据进行操作. (4) 在CViwe的派生中的OnDraw函数中编写窗口重绘时的代码. Gilbert觉得以上是很大的, 下面介绍一些小: CRect 矩形,拥有四个成员变量:top, left, bottom, right。分别表是左上角和右下角的坐标。可以通过以下的方法构造: CRect( int l, int t, int r, int b ); 指明四个坐标 CRect( const RECT& srcRect ); 由RECT结构构造 CRect( LPCRECT lpSrcRect ); 由RECT结构构造 CRect( POINT point, SIZE size ); 有左上角坐标和尺寸构造 CRect( POINT topLeft, POINT bottomRight ); 有两点坐标构造 它的几个成员函数: int Width( ) const; 得到宽度 int Height( ) const; 得到高度 CSize Size( ) const; 得到尺寸 CPoint& TopLeft( ); 得到左上角坐标 CPoint& BottomRight( ); 得到右下角坐标 CPoint CenterPoint( ) const; 得当中心坐标 此外矩形可以和点(CPoint)相加进行位移,和另一个矩形相加得到“并”操作后的矩形。 CPoint 点的坐标,有两个成员变量:x, y。可以和另一个点相加。 CString 表示可变长度的字符串。使用CString可不指明内存大小,CString会根据需要自行分配。几个成员函数: GetLength 得到字符串长度 operator + 相当于strcat Compare 比较 CompareNoCase 不区分大小写比较 MakeUpper 改为小写 MakeLower 改为大写
CRuntimeClass结构 在CRuntimeClass结构中定义了名、对象所占存储空间的大小、的版本号等成员变量及动态创建对象、派生关系判断等成员函数。每一个从CObject派生的都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基的信息。 要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时型识别的MFC宏。 CCmdTarget (1)消息发送 MFC应用程序为每个CCmdTarget派生创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。 (2)设置光标 BeginWaitCursor() 将光标改为沙漏形状; EndWaitCursor() 将光标改回到之前的形状; RestoreWaitCursor()用于将光标还原为等待状态。 (3)支持自动化 CCmdTarget支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。 CWinThread 由CCmdTarget派生,主要工作是创建和处理消息循环。 CWinApp 从CWinThread派生,成员函数InitApplication()、InitInstance()、Run()。 在InitInstance()函数中,创建了一个单文档模板或多文档模板(CDocTemplate)的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档对象,框架窗口对象和视图对象. 在MFC应用程序中有且仅有一个CWinApp派生的对象,代表程序运行的主线程,代表应用程序本身。 CWnd 由CCmdTarget直接派生,是MFC中最基本的GUI对象。公共变量m_hWnd用于存放供API函数调用的窗口句柄。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧