在Windows编程中拼图“ScrollWindow”API函数的第四个参数

时间:2017-09-03 06:31:51

标签: c windows winapi

我的代码如下所示。程序运行时,我先单击鼠标右键,然后单击鼠标左键。结果如第一张图所示。根据{{​​1}}函数的帮助文档,如果第四个参数是ScrollWindow,则应滚动整个客户区。为什么x = 30个设备单位有10个像素的间隙?

Actual result

我想知道为什么结果不像第二张图片那样显示。

Expected result

NULL

1 个答案:

答案 0 :(得分:1)

  

如果第四个参数为NULL,则应滚动整个客户区。

您还指定了剪切矩形(第5个参数),因此当然不会滚动整个客户区域。但实际上这与问题无关。

  

为什么x = 30个设备单位有10个像素的间隙?

因为当Windows告诉你这样做时,你不会画出那个差距。

来自MSDN

  

ScrollWindow发现的区域没有重新绘制,但它被合并到窗口的更新区域中。应用程序最终收到WM_PAINT消息,通知它必须重新绘制该区域。

您的WM_PAINT处理程序除了通过验证更新区域而对Windows进行说明外没有任何其他内容。

通过仅在WM_PAINT中完成所有绘画来修复代码。滚动WM_LBUTTONDOWN时,您还必须增加一个存储滚动位置的变量。将滚动位置添加到Ellipse()中传递给WM_PAINT的坐标。现在你应该得到第二张照片的结果。

我建议在Win32绘画中找到一个很好的教程,因为这里似乎缺少一些基本知识。了解"更新区域"是和它如何与油漆循环相互作用。