我想用一个自定义的位图来实现一个简单的音量增大/减小button,它将会有一个简单的hover效果和鼠标下移效果。
我的第一个想法是处理hover的WM_MOUSEMOVE
,并处理WM_LBUTTONUP
和WM_LBUTTONDOWN
为鼠标的效果。
首先,这是最简单的方法吗? 我可以超级button,只是绘制位图,忘记文本…
然后我有背景的问题,这应该是透明的,我知道我可以通过将SRCAND
传递给BitBlt
,但这需要我有2个图像为每个button。 有没有办法只用一个图像做到这一点? 就像我在图像编辑器上放一个绿色的背景一样,我可以用一个绿色的屏幕来掩盖这个效果吗?
您需要创建一个常规按钮,并使用SetWindowSubclass子类。 该按钮必须具有所有者绘制样式,这意味着在父WndProc中,您正在处理WM_DRAWITEM 。 正如你所说的那样,你将会把BitBlt '或' StretchBlt '放在图像的背景上。
对于悬停事件,您必须执行以下操作:
IsMousedOver
IsMousedOver
,然后用InvalidateRect使控制失效 (这将在父级触发WM_DRAWITEM
) WM_MOUSEMOVE
,则应清除IsMousedOver
WM_DRAWITEM
中,您应该根据该状态检查IsMousedOver和BitBlt 如果你想处理MouseUp / MouseDown,你可以改变布尔值为一个int而不是三态。 但是,大多数实现的MouseDown与常规按钮相同,而MouseUp则仅仅是普通的背景。
至于你对2张图片的查询,可能是用1张图做的,但是我以前没有试过。