我的代码如下所示。程序运行时,我先单击鼠标右键,然后单击鼠标左键。结果如第一张图所示。根据{{1}}函数的帮助文档,如果第四个参数是ScrollWindow
,则应滚动整个客户区。为什么x = 30个设备单位有10个像素的间隙?
我想知道为什么结果不像第二张图片那样显示。
NULL
答案 0 :(得分:1)
如果第四个参数为NULL,则应滚动整个客户区。
您还指定了剪切矩形(第5个参数),因此当然不会滚动整个客户区域。但实际上这与问题无关。
为什么x = 30个设备单位有10个像素的间隙?
因为当Windows告诉你这样做时,你不会画出那个差距。
来自MSDN:
ScrollWindow发现的区域没有重新绘制,但它被合并到窗口的更新区域中。应用程序最终收到WM_PAINT消息,通知它必须重新绘制该区域。
您的WM_PAINT
处理程序除了通过验证更新区域而对Windows进行说明外没有任何其他内容。
通过仅在WM_PAINT
中完成所有绘画来修复代码。滚动WM_LBUTTONDOWN
时,您还必须增加一个存储滚动位置的变量。将滚动位置添加到Ellipse()
中传递给WM_PAINT
的坐标。现在你应该得到第二张照片的结果。
我建议在Win32绘画中找到一个很好的教程,因为这里似乎缺少一些基本知识。了解"更新区域"是和它如何与油漆循环相互作用。