读书人

鼠标按上按钮更换字体颜色//有种情况鼠

发布时间: 2013-02-19 11:11:40 作者: rapoo

鼠标按下按钮更换字体颜色//有种情况鼠标按下并没放开,在按钮别处放开字体不更换。


TRACKMOUSEEVENT 如何正确使用呀??????

BOOL loginDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message == WM_MOUSEMOVE)
{
if(pMsg->hwnd == button.m_hWnd)
{
RECT rect = {0};
rect.left = 20;
rect.right = 20;
if (!tracking)//tracking在构造函数里初始化为0.
{
TRACKMOUSEEVENT t = {
sizeof(TRACKMOUSEEVENT),
TME_LEAVE,
m_hWnd,
0
};
if (::_TrackMouseEvent(&t)){
tracking = true;
button.SetText(&rect,textfont,RGB(146,206,209),DT_LEFT|DT_VCENTER|DT_SINGLELINE);
//Invalidate();
}
}


}
if(pMsg->hwnd == button2.m_hWnd)
{
RECT rect = {0};
rect.left = 20;
rect.right = 20;
button2.SetText(&rect,textfont,RGB(146,206,209),DT_LEFT|DT_VCENTER|DT_SINGLELINE);
}
}
if(pMsg->message == WM_MOUSELEAVE)
{
if(pMsg->hwnd == button.m_hWnd)
{
RECT rect = {0};
rect.left = 20;
rect.right = 20;
tracking = false;
button.SetText(&rect,textfont,RGB(10,10,10),DT_LEFT|DT_VCENTER|DT_SINGLELINE);

}
if(pMsg->hwnd == button2.m_hWnd)
{
RECT rect = {0};
rect.left = 20;
rect.right = 20;
button2.SetText(&rect,textfont,RGB(10,10,10),DT_LEFT|DT_VCENTER|DT_SINGLELINE);
}
}
if(pMsg->message == WM_LBUTTONDOWN)
{
if (!tracking)
{
TRACKMOUSEEVENT t = {
sizeof(TRACKMOUSEEVENT),
TME_LEAVE,
m_hWnd,
0
};
if (::_TrackMouseEvent(&t)){
tracking = true;
Invalidate();
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}

[解决办法]
● OnMuseMove:这个函数时MFC内部已经做好了的事件:主要响应鼠标移动事件.但是这个事件有一个严重的问题:它只能识别鼠标是否在其上移动.

● OnMouseLeave():这个是自定义函数(但是要在消息映射里面与WM_MOUSELEAVE对应

OnMouseMove需要加上的代码段如下:

if ( m_bOver == FALSE )

{

m_bOver = TRUE;

TRACKMOUSEEVENT tme;

tme.cbSize = sizeof( TRACKMOUSEEVENT );

tme.dwFlags = TME_LEAVE;

tme.hwndTrack = m_hWnd;

tme.dwHoverTime = 0;

::TrackMouseEvent( &tme );



}

http://blog.csdn.net/yuanweihuayan/article/details/6831248

读书人网 >VC/MFC

热点推荐