首页 > 其他分享 >MFC实现Txt05之研究CRichEditView与OnDraw/Serialize/OnNewDocument

MFC实现Txt05之研究CRichEditView与OnDraw/Serialize/OnNewDocument

时间:2022-08-19 17:25:35浏览次数:104  
标签:MFC 函数 PAINT WM OnDraw OnNewDocument OnPaint CRichEditView

首先明确声明,单文档CTestView继承CRichEditView,在此基础上研究分析所遇到的问题。


 

1、关于OnDraw函数:

2、关于Serialize函数:


 

1、关于OnDraw:不知道有没有以及过,其实是在OnPaint中调用的OnDraw,也就是消息WM_PAINT,即WM_PAINT->OnPaint->OnDraw;在OnDraw中进行绘制,显示数据。

 

 

 

此处有两个函数:UpdateAllViews() 与 Invalidate()--------UpdateAllViews()通知所有视图做出相应改变,Invalidate()使窗口无效,这里个人理解一般,参考链接:UpdateAllViews() 与 Invalidate()   也就是下图:(此外,这里额外给一个链接,写的不错:令人生疑的Windows窗口消息WM_PAINT详解 )

 

 

 回到CRichEditView中来,继承它的类是CTestView,可以发现,在CTestView中初始是不带OnDraw的,这个需要主动去类向导中添加虚函数OnDraw,观察OnDraw函数还是会发现这和继承CView得到的OnDraw不一样,其函数内不会自带任何东西

 

 

 在此处用一些语句测试一下:pDC->TextOut(200, 200, _T("输出试一下")); // 绘制一行文本

发现并没有出现这行文本,问题何在?可以发现,程序运行过程中根本不会来到这里,也就是完全不会调用函数OnDraw,可以尝试改变窗口大小,发现仍然不会输出文本,不禁思考,此处应该是连OnPaint都不会调用,难道是屏蔽了WM_PAINT消息?尝试添加OnPaint函数,并在其中加上一个消息框提示,用以表明调用这个函数;见下面结果,发现WM_PAINT消息还是正常被处理,那为什么这里在没有主动添加OnPaint函数时没有响应?追溯到源头,CWnd中有函数OnPaint,按照继承这一套CTestView应该是可以调用OnPaint处理的,但却没有任何反应(暂时没能解决这个问题,也不知道怎么查找资料),无奈,只能先这样处理。

              

通过上面一番处理,是不是发现现在可以在OnDraw中绘制了,但是,这恰恰违背了CRichEditView的使用方式,你可以尝试输入,发现现在根本无法正常输入了(如下图),完全打乱了CRichEditView的使用。(这能不能解释为什么在CTestView中是无法直接使用OnPaint和OnDraw这两个函数的呢?可能就是为了屏蔽WM_PAINT,以至于CTestView不写函数OnPaint,就无法响应WM_PAINT。(当然我不知道怎么证实我的想法,但是猜测得到的结果,估计八九不离十)

 

 

此外补充一点,我之前也是想在OnDraw中使用SetWindowText的(虽然没成功,导致我从不在OnDraw里使用),不过找到了这其中的问题,(在OnDraw()函数中,利用for循环更新SetWindowText,为什么CEdit不能实时显示-CSDN社区 )(mfc中SetWindowText()导致程序卡死)(还好不是我问的问题,不然我也被骂,哈哈哈哈)提示一下,SetWindowText会引发消息WM_SETTEXT,下图就是问题答案了,(大致可以理解为,发了一个WM_PAINT消息,然后在OnDraw中又发了一个WM_SETTEXT消息,导致又需要发送一个WM_PAINT消息,然后就一直然后了)(我要是理解错了,。。。。。记得骂我,)

问题解决,搞明白了,记得删掉OnDraw、OnPaint函数,还原到原来的程序,毕竟人家本来就不想你用。


 

 2、关于Serialize函数:周末再写,马上该滚蛋了

 

标签:MFC,函数,PAINT,WM,OnDraw,OnNewDocument,OnPaint,CRichEditView
From: https://www.cnblogs.com/2015-16/p/16601875.html

相关文章

  • NTGraph.ocx MFC曲线图
    1.下载NTGraph.ocx   www.codeproject.com/KB/miscctrl/NTGraph_ActiveX/NTGraph_bin.zip这个地址是没有被该过的原始的NTGraph.ocx,也是大多数人使用的那个从中得......
  • MFC实现Txt03之CRichEditView实现文本拖拽功能
    02实现了基本的Txt操作功能,现在还想加一个拖拽功能,即把一个Txt文本拖拽进来,然后自动打开该文本。(参考Txt拖拽,不理解的话就试一下,就是把另一个Txt拖到一个已打开的Txt中) ......
  • MFC实现Txt02之当然是CRichEditView了
    需要用到文本编辑功能,当然是用现成的啦,自己写字符输入那还挺麻烦的。。。比如前面就没解决的问题,后续还有什么只能一行一行写,不能随意跳动行啥的,一系列问题,还有有现成的,不......
  • MFC 界面自适应不同分辨率
    引用:(36条消息)MFC界面自动调整适应不同分辨率_weixin_42359982的博客-CSDN博客_mfc窗口适应屏幕首先获取界面对话框的原始尺寸Rectrecta;GetClientRect(&recta);/......
  • MFC绘制无向图
    MFC绘制无向图通过MFC界面实现简单的无向图功能:用鼠标左键点击,按顺序生成一幅无向图,无线图的节点用图标icon显示,节点之间用直线连接,点击到已有的点视为上一个点和已有的......
  • MFC实现Txt01之手写代码实现输入
    不是很想写这个。。。主要是因为这一块内容都是照着孙鑫那本书上的内容写的,没什么特别之处,而且网上很多这些内容,随便百度一下就有,(第五章,文本编程,放个链接,这位写的还不错)(其......
  • MFC画刷绘图(想模仿Microsoft的画图)
    CBrush类,创建画刷对象,通常用于填充一块区域。(此处缺gif,术业有专攻,东西也有专用。。。日后一定补上来,痛哭流涕) 1.创建一个红色画刷绘图:(鼠标左键按下,这个消息响应OnLButto......