SetWindowPos是否立即绘制
Does SetWindowPos paint immediately
在每次鼠标移动事件中,我都会移动我的窗口。从文档中可以看出,如果移动成功,SetWindowPos
将返回一个非零值。
我想证实我的推断,即每次SetWindowPos
返回一个非零值时,移动就已经发生了。这意味着,窗户实际上已经在新的位置重新喷漆,只有这样功能才会返回。在函数返回后的一段时间内(当处理某种消息时),移动不会发生。
我想证实我的推断,即每次SetWindowPos返回一个非零值时,移动就已经发生了。这意味着,窗户实际上已经被重新喷涂了
这是错误的假设。成功的移动和非零回报与绘画无关。
API更改位置,非零返回值确认接受新值。API不承诺,也不将整个重新绘制循环作为其执行的一部分。更重要的是,位置、Z顺序等的变化也可能影响其他窗口的可见性,而这些窗口又需要重新绘制,而这又必须发生在相应的线程上。重新绘制已排定,它们与SetWindowPos
返回不同步。MSDN上的文档没有任何关于重新绘制/更新的承诺。那么API的零返回表示您的参数根本不被接受(特别是无效的窗口句柄)。
奖金阅读:
当您调用SetWindowPos函数时,窗口管理器会更新窗口大小、位置等,然后重新绘制受操作影响的窗口默认情况下,SetWindowPos函数会在返回之前快速重新绘制窗口。函数返回后,正常的WM_PAINT消息将完成绘制窗口的实际工作快速重新绘制是为了立即得到反馈,表明窗口确实改变了大小、位置等等。
SetWindowPos在完成其工作后立即返回。
但是主绘制被推迟,直到窗口接收到WM_NCPAINT和WM_PAINT。根据我的经验,我可以说对框架的更改通常是由SetWindowPos直接绘制的。
如果希望窗口完全重新绘制,请在调用SetWindowPos 之后调用UpdateWindow或RedrawWindow(带有适当的标志)
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- 如何检查在 Adafruit TFT 屏幕上绘制的两个圆圈是否相互接触
- 如何确定我跟踪的对象球是否越过我绘制的线
- SetWindowPos是否立即绘制
- 使用OpenCV教程中的任何一个进行人脸检测是否有任何函数可以计算绘制在人脸上的矩形的大小
- 是否可以使用 SFML 绘制曲线
- 是否可以在仅用于循环的形状中绘制形状?如果是,请给我指一个正确的方向
- 是否可以在Visual C++2010学习版中绘制图形
- 绘制或渲染QGraphicsView或QWidget时是否存在信号或事件
- 是否可以使用G_TRIANGLE_FAN或GL_TRIANGLE_STRIP绘制两个单独的四边形
- 是否可以在directx dc/buffer上使用opengl进行绘制?
- 是否有一种方法可以在Qt中重新绘制区域
- 是否有可能保存当前的视口,然后在OpenGL和c++中在下一个绘制周期中重新绘制保存的视口?
- 是否有C或c++的高级图形绘制API ?
- 使用GL_TRIANGLE_STRIP或索引gl_三角形来绘制动态数量的四边形是否更有效?
- 在窗口中绘制之前是否有必要使更新区域无效?
- 使用空着色器程序进行绘制是否有效?
- 是否可以将Windows位图绘制到cairo表面
- 是否可以在另一个窗口中绘制(使用 Opencv/ffmpeg