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 元素对按钮的悬停效果 - 当鼠标超出按钮尺寸时动画出来