gpt4 book ai didi

c - 当我使用 InvalidateRect() 时,滚动条箭头没有视觉动画

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:23 25 4
gpt4 key购买 nike

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

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

当我删除 InvalidateRect() 并单击箭头按钮时,它会按预期进行动画处理:

enter image description here

但是,当我使用 InvalidateRect() 时,箭头按钮在单击时没有动画:

enter image description here

这是我为 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 向父窗口而不是子控件发送消息。

注意:我不知道使用WS_CLIPCHILDREN是否有任何缺点。

关于c - 当我使用 InvalidateRect() 时,滚动条箭头没有视觉动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32369224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com