下面这些东西有些杂,显示提示信息的作用,有些试验过,有些没有。东西有些零散,希望有些能够被大家利用。
1.、按钮上只有图片,没有写到文字,所以我想在鼠标移动到按钮时,能弹出一个标签上面写到一些提示信息,如鼠标移运到保存按钮是会在旁边显示“保存”两个字。
解决办法:
用setTooLTip("保存")
2、可以通过背景图片来实现,但是要隐藏按钮的边界,通过setStyle()方法。
3、如果获取按钮时需要显示高亮,那么可以画两个按钮的图片,一个暗色一个亮色,这样在点击的时候可以互相切换。
还有个方法是从网上找的,没有具体代码,只有一个名称
repaint(const QRegion &)
4、想要让鼠标经过按钮时,按钮上的图像发生改变,首先要知道的是,鼠标什么时候在按钮上。这里有一个很有用的函数
BOOL TrackMouseEvent(
LPTRACKMOUSEEVENT lpEventTrack // pointer to a TRACKMOUSEEVENT
// structure
);
它可以用来跟踪鼠标是否在某一个区域上,是否离开某个区域。
它的参数是一个结构LPTRACKMOUSEEVENT,在该结构内可以指出要跟踪鼠标的什么行为,以及在什么区域内进行跟踪。
typedef struct tagTRACKMOUSEEVENT {
DWORD cbSize;
DWORD dwFlags;
HWND hwndTrack;
DWORD dwHoverTime;
} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
下面来通过一个实例来讲述:
BOOL CHotButton::IsCursorOn()
{
TRACKMOUSEEVENT mouseEve;
mouseEve.cbSize=sizeof(mouseEve);
mouseEve.dwFlags=TME_LEAVE;
mouseEve.dwHoverTime=HOVER_DEFAULT;
mouseEve.hwndTrack=GetSafeHwnd();
return _TrackMouseEvent(&mouseEve);
}
该函数的功能是判断鼠标是否在某一个控件上。
dwFlags=TME_LEAVE,由MSDN上的说明可以知道,当鼠标离开指定区域时会发出消息WM_MOUSELEAVE ,由此我们对鼠标离开该区域时的处理操作就可以放到WM_MOUSELEAVE 的响应函数OnMouseLeave(...)中。
mouseEve.hwndTrack=GetSafeHwnd();指明了跟踪鼠标的区域,GetSafeHwnd();得到本对象的句柄,如果有一按钮声明成了类CHotButton的对象,则GetSafeHwnd();得到的就是这个按钮的句柄,从而当鼠标离开这个按钮时就会有消息WM_MOUSELEAVE 发出。
void CHotButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//AfxMessageBox("good");
if(IsCursorOn())//如果鼠标在按钮上
{
if(!flag)//flag用来标记鼠标是否走出按钮的范围,如果没有走出,则按钮图像在第一次变化过后就不再变化
{
flag=TRUE;
if(ID_B1!=NULL)//如果没有指定图像,就不加载图像
this->LoadBitmaps(ID_B1,ID_B2);//加载图像
InvalidateRgn(NULL,true);//更新按钮区域
}
}
else//如果不在,则将消息交给上层处理
{
CBitmapButton::OnMouseMove(nFlags, point);
}
}
上面这个函数当鼠标在按钮上进行移动时进行相应处理,如果不在,就不对鼠标移动事件进行处理。
LRESULT CHotButton::MouseLeave(WPARAM wParam, LPARAM lParam)
{
flag=FALSE;
if(ID_B1!=NULL)//如果没有指定图像,就不加载图像
this->LoadBitmaps(ID_B1,ID_B2);//加载图像
InvalidateRgn(NULL,true);//更新按钮区域
return 0;
}
上面这个函数当鼠标离开时更新按钮的图像。
由上面两个函数便可以实现鼠标经过按钮时按钮的图像发现改变这一功能。