我在控件中的WndProc覆盖中自定义处理WM_PAINT和WM_ERASEBKGD。
protected override void WndProc(ref Message m)
{
if (m.Msg == 0xF)
{
// [Draw using stored hDC]
m.Result = (IntPtr)1;
}
else if (m.Msg == 0x14)
{
m.Result = (IntPtr)1;
}
else
base.WndProc(ref m);
}
它工作正常,除了它被不断地调用,大约每秒300次,如果我允许基地处理它,它被调用一次。我要离开的是什么?
答案 0 :(得分:3)
这是因为你没有告诉Windows“脏矩形”不再是脏的并且被涂上了。所以它不断生成WM_PAINT消息。
这通常由BeginPaint / EndPaint()完成,由.NET内置的默认消息处理程序调用。其中调用虚拟OnPaint()方法。建议的方法是覆盖它或处理Paint事件。如果你出于某种原因不想使用它,那么你必须对ValidateRect()进行转发。