我创建了一个水平滚动条控件,在WM_HSCROLL
事件处理程序中有以下代码:
case WM_HSCROLL:
{
InvalidateRect(hWnd, NULL, TRUE);
}
break;
当我删除
InvalidateRect()
并单击箭头按钮时,它将按预期设置动画:但是,当我使用
InvalidateRect()
时,单击箭头按钮时不会设置动画:这是
WM_PAINT
的代码:case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
break;
最佳答案
我想我知道问题是什么:
当调用InvalidateRect()
时,它将向
父窗口以及子控件。
现在,当我单击箭头按钮时,箭头的事件处理程序
按钮点击将被执行,我想它将动画箭头按钮。然而,WM_PAINT
来自WM_PAINT
的消息将重绘滚动条(到其原始未设置动画的状态),因此动画将
不明显。
要解决此问题,只需在创建父窗口时使用InvalidateRect()
样式,现在当调用WS_CLIPCHILDREN
时,它将只向父窗口而不是子控件发送InvalidateRect()
消息。
注意:我不知道使用WM_PAINT
是否有什么缺点。