关于CBitmapButton的问题 本帖最后由 kelvinty 于 2010-01-26 09:06:57 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 OnMouseHover事件中,实现切换过程,判断是否在按钮上面区域,如果在则切换为一种状态,不在切换为另一种状态 不好意思,你说的这个道理我懂,关键就是怎么切换??? 我知道有这么个结构体,绘制的时候是根据 DRAWITEMSTRUCT 里面的 itemState 来绘制的,我现在就是不知道怎么改这个值,获得焦点时的值为 10 。 DrawItem里面的itemState无法判断,你需要处理MouseMove消息,然后_TrackMouseEvent,这样就可以监视MouseHover在OnMouseHover中处理切换。 你需要重载这个BUTTON按钮,然后通过响应WM_MOUSEMOVE和WM_MOUSELEAVE消息判断鼠标是否在按钮上,最后重载虚函数virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);进行重绘void CXXButton::OnMouseMove(UINT nFlags, CPoint point) { if(!m_bHover) { m_bHover = TRUE; // 是否滑过 TRACKMOUSEEVENT tm; tm.cbSize = sizeof(TRACKMOUSEEVENT); tm.hwndTrack = m_hWnd; tm.dwFlags = TME_LEAVE; _TrackMouseEvent(&tm); Invalidate(); } CButton::OnMouseMove(nFlags, point);}LRESULT CXXButton::OnMouseLeave(WPARAM wParam, LPARAM lParam){ if(m_bHover) { m_bHover = FALSE; // 是否滑过 Invalidate(); } return CButton::DefWindowProc(WM_MOUSELEAVE, wParam, lParam);} 一个TEXT宏语句的理解 关于ComboBox的 GetCurSel() 改变和它关联的CString变量 为什么得到的不是 -1(已经Updatedata了) 请你来帮我确定 VC++的各个类的头文件是不是不能互相包含? 求图像旋转算法。 ADO怎样获取读取数据集的字段数,还有总记录数? 最近的作品 请问Windows程序和MFC程序的区别 请教一个很基础的问题! 怎样用最短的代码实现:打开一个程序,隐藏执行,并等待其执行完毕? 加载资源后,为何GetLastError()后出现1812错误? 怎么设置GDI绘制质量为最好?
你需要处理MouseMove消息,然后_TrackMouseEvent,这样就可以监视MouseHover在OnMouseHover中处理切换。
void CXXButton::OnMouseMove(UINT nFlags, CPoint point)
{
if(!m_bHover)
{
m_bHover = TRUE; // 是否滑过
TRACKMOUSEEVENT tm;
tm.cbSize = sizeof(TRACKMOUSEEVENT);
tm.hwndTrack = m_hWnd;
tm.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tm);
Invalidate();
}
CButton::OnMouseMove(nFlags, point);
}LRESULT CXXButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
if(m_bHover)
{
m_bHover = FALSE; // 是否滑过
Invalidate();
}
return CButton::DefWindowProc(WM_MOUSELEAVE, wParam, lParam);
}