我创建了一个水平滚动条控件,在WM_HSCROLL事件处理程序中有以下代码:

case WM_HSCROLL:
    {
        InvalidateRect(hWnd, NULL, TRUE);
    }
    break;

当我删除InvalidateRect()并单击箭头按钮时,它将按预期设置动画:
c - 当我使用InvalidateRect()时,滚动条箭头没有可视化动画-LMLPHP
但是,当我使用InvalidateRect()时,单击箭头按钮时不会设置动画:
c - 当我使用InvalidateRect()时,滚动条箭头没有可视化动画-LMLPHP
这是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是否有什么缺点。

07-27 20:06