首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-02-19 
鼠标按下按钮更换字体颜色//有种情况鼠标按下并没放开,在按钮别处放开字体不更换。TRACKMOUSEEVENT 如何正

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


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

热点排行