我从 CWnd 派生了一个窗口,在其中创建了一些 OwnerDrawn 按钮。按钮是从 CButton 派生的。
现在,当用户将鼠标悬停在按钮上时,我想将其更改为 BackgroundColor。
因此,我已经实现了 OnMouseHover() 和 OnMouseLeave() 消息正在发送:
BEGIN_MESSAGE_MAP(CFooterButton, CButton)
ON_WM_MOUSEHOVER()
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
END_MESSAGE_MAP()
void CFooterButton::OnMouseMove(UINT nFlags, CPoint point)
{
//start tracking of Hover and Leave Event
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.hwndTrack = m_hWnd;
tme.dwHoverTime = HOVER_DEFAULT;
TrackMouseEvent(&tme);
CButton::OnMouseMove(nFlags, point);
}
void CFooterButton::OnMouseHover(UINT nFlags, CPoint point)
{
HDC hdc = *GetWindowDC();
SetBkColor(hdc,RGB(54, 125, 184));
CButton::OnMouseHover(nFlags, point);
}
在调试器和间谍中,我可以看到代码被调用但没有任何反应。由于我对 MFC/c++ 比较陌生,我假设我没有正确使用 DC。有人可以解释我为什么它不工作以及如何修复它吗?