Ownerdraw按钮的悬停效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ownerdraw按钮的悬停效果相关的知识,希望对你有一定的参考价值。

我设置了ownerdraw按钮。我使用Rectangle并使用消息WM_DRAWITEM。并在按钮中,成功判断ON / OFF。但我想将悬停效果添加为css:hover。我想用几秒钟改变颜色。这很难。我搜索了几天。但我找不到解决方案。这是我的第一个问题。我很抱歉英语不好。

我试图抓住鼠标(x,y)。但是我不能。

case WM_MOUSEMOVE:
x = LOWORD(lp); 
y = HIWORD(lp); 


if(buttonlefttop<= x <= buttonlefttop + buttonwidth && buttontoptop<= y 
<= buttontoptop + buttonheight){
            std::cout<<"[INFO] "<<"ON
";
}else{
            std::cout<<"[INFO] "<<"OFF
";
}

case WM_DRAWITEM:hdc =((LPDRAWITEMSTRUCT)(lp)) - > hDC;

        if (((LPDRAWITEMSTRUCT)(lp))->itemState & ODS_SELECTED) {
            hpen = CreatePen(PS_SOLID, 5, RGB(80, 91, 109));
            hbr = CreateSolidBrush(RGB(80, 91, 109));

            SelectObject(hdc, hpen);
            SelectObject(hdc, hbr);

            std::cout<<"[INFO] ON
";
        }else {
            hpen = CreatePen(PS_SOLID, 5, RGB(73, 147, 120));
            hbr = CreateSolidBrush(RGB(73, 147, 120));

            SelectObject(hdc, hpen);
            SelectObject(hdc, hbr);

            std::cout<<"[INFO] OFF
";
        }
        Rectangle(hdc , 0 , 0 ,
         buttonwidth,buttonheight
        );
        DeleteObject(SelectObject(hdc , GetStockObject(WHITE_BRUSH)));
        return TRUE;

我不能添加hovereffect。

答案

您可以使用自Windows Vista以来可用的Buffered Animation API。这与标准Win32控件在内部用于绘制动画淡入淡出效果的API相同。

API负责:

  • 为淡入淡出动画的第一个图像创建位图
  • 为淡入淡出动画的最后一个图像创建一个位图
  • 创建一个定时调用WM_PAINT的计时器
  • 生成动画的中间图像

您基本上只需要渲染动画的第一个和最后一个图像,API会自动呈现两者之间的步骤。

Web上有许多样本用于使用此API。我上面链接的API页面上已有一个。有一个tutorial on CodeGuru有更好的解释。

以上是关于Ownerdraw按钮的悬停效果的主要内容,如果未能解决你的问题,请参考以下文章

使用 :after 元素对按钮的悬停效果 - 当鼠标超出按钮尺寸时动画出来

CSS3悬停文字幻灯片效果

如何在 .NET 中创建非 OwnerDraw 按钮?

如何使悬停在活动按钮上不使用悬停效果?

19windows_19_OwnerDraw自制按钮DIYBUTTON

前端例程20220729:按钮悬停边框卷动效果