关于按钮变色 我用gdi函数绘制了一个按钮,想鼠标放在按钮上时变色,于是在mousemove消息响应中加了Invalidate函数重绘改变颜色,当我一动鼠标时界面闪得很厉害~怎么可以鼠标动时不产生闪烁感??或者有其它方法实现这个功能吗(按钮只是一个长方形rectangle,我不用系统的按钮)??谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL CxxxxDlg::PreTranslateMessage(MSG* pMsg) {// TODO: Add your specialized code here and/or call the base classif(pMsg->message==WM_MOUSEMOVE){CRect rc(50,50,100,100);if(rc.PtInRect(pMsg->pt 重绘颜色} 在mousemove消息响应中加了Invalidate函数, 是肯定一直闪的, mousemove响应一次你刷新一次。 要实现这个功能你可以让鼠标在按钮范围内时, 设置状态 m_bInBtn = TRUE, 然后离开后重新设置为FALSE, 如果bInBtn == TRUE 你可以再设置一个变量m_bSetBKColor = TRUE; 鼠标移动到按钮内, 设置颜色后 将bSetBKColor = FALSE, 这样 只有当bSetBKColor 和 bInBtn同时为TRUE时, 才invalidate 不知道说清楚没 在OnMouseMove加入void CMyBmpButton::OnMouseMove(UINT nFlags, CPoint point) { if (!m_bTrackLeave) { TRACKMOUSEEVENT mouseEvent; mouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); mouseEvent.dwFlags = TME_LEAVE | TME_HOVER; mouseEvent.hwndTrack = this->GetSafeHwnd(); mouseEvent.dwHoverTime = 50; // 设为0则取默认400ms _TrackMouseEvent(&mouseEvent); m_bTrackLeave = FALSE; } CButton::OnMouseMove(nFlags, point);}增加2个自定义消息响应ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)//鼠标离开按钮LRESULT CMyBmpButton::OnMouseLeave(WPARAM wParam, LPARAM lParam){ ReFlash(); return 0; }//鼠标移动到按钮上LRESULT CMyBmpButton::OnMouseHover(WPARAM wParam, LPARAM lParam){ if (!m_bHot) { m_bHot = TRUE; Invalidate(); UpdateWindow(); return 0; } return 0; }void CMyBmpButton::ReFlash(){ if (m_bHot) { m_bHot = FALSE; Invalidate(); UpdateWindow(); return; }} 增加悬停 和 离开两个消息WM_MOUSEHOVERWM_MOUSELEAVE 公司里只有一个人编程,真苦恼 调用DLL导出类的函数失败 请教:VC++ 图像处理的问题 创建表格时sQL(CString)长度太长怎么办 用Object ARX怎么创建一个可停靠在AutoCAD的对话条?如何使用ARX的工具条? mysql的用法 怎样机子启动时自动运行我的软件? 怎么调整CListCtrl控件的行高度? 请问DAO打开Access2000格式数据的方法 分不是问题,大家来探讨,给点思路或是相关资料 老问题,至今没解决 D3D绘图卡死
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_MOUSEMOVE)
{
CRect rc(50,50,100,100);
if(rc.PtInRect(pMsg->pt
重绘颜色}
要实现这个功能你可以让鼠标在按钮范围内时, 设置状态 m_bInBtn = TRUE, 然后离开后重新设置为FALSE, 如果bInBtn == TRUE 你可以再设置一个变量m_bSetBKColor = TRUE; 鼠标移动到按钮内, 设置颜色后 将bSetBKColor = FALSE, 这样 只有当bSetBKColor 和 bInBtn同时为TRUE时, 才invalidate 不知道说清楚没
void CMyBmpButton::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_bTrackLeave)
{
TRACKMOUSEEVENT mouseEvent;
mouseEvent.cbSize = sizeof(TRACKMOUSEEVENT);
mouseEvent.dwFlags = TME_LEAVE | TME_HOVER;
mouseEvent.hwndTrack = this->GetSafeHwnd();
mouseEvent.dwHoverTime = 50; // 设为0则取默认400ms
_TrackMouseEvent(&mouseEvent);
m_bTrackLeave = FALSE;
} CButton::OnMouseMove(nFlags, point);
}增加2个自定义消息响应
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)//鼠标离开按钮
LRESULT CMyBmpButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
ReFlash();
return 0;
}//鼠标移动到按钮上
LRESULT CMyBmpButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
if (!m_bHot)
{
m_bHot = TRUE; Invalidate();
UpdateWindow(); return 0;
}
return 0;
}void CMyBmpButton::ReFlash()
{
if (m_bHot)
{
m_bHot = FALSE; Invalidate();
UpdateWindow();
return;
}
}
WM_MOUSEHOVER
WM_MOUSELEAVE