我正在学习使用“使用MFC编程Windows(第2版)”一书中的MFC编程。我对第9章中的书籍例子有一些疑问。
当我打开文件或单击新文件时,会调用函数CSquaresView::OnDraw()
。我检查了堆栈,原因是CView::OnPaint()
调用了这个函数。
但我不明白如何调用CView::OnPaint()
。如果默认设置调用了WM_PAINT
,是否会生成消息CSingleDocTemplate::OpenDocumentFile()
?是
是否可以改变行为?
谢谢, 布赖恩
答案 0 :(得分:1)
为刚刚创建并可见的每个窗口触发WM_PAINT。
但内部执行以下代码(取决于MDI / SDI),强制窗口更新:
防止执行OnDraw并不明智,因为在这种情况下,文档的内容无法显示给用户。这必须要做,总是在窗口是新的,或者文档的内容刚刚改变时(这里在加载新文档后改变了)。
答案 1 :(得分:0)
虽然我没有这本书或者知道样本是关于什么的(并且我认为很多读者都没有...),但我猜想你得到WM_PAINT的原因是因为一个文件打开对话框,在某个时刻覆盖您的绘图区域,当它关闭时,该区域无效。这可能吗?
答案 2 :(得分:0)
我错过了什么吗?这是标准的Windows行为。调用CView::OnPaint()
是因为Windows生成了WM_PAINT
消息。如果您正在调试并在OnDraw()
中设置断点,它将始终在那里中断,因为调试器和应用程序轮流运行(但除非您的应用程序在单独的监视器上运行)并且生成WM_PAINT
。如果您确实想要停止重绘,请尝试SetRedraw