本来问题是这样的,鼠标按下按钮,有一个状态,鼠标不放开在按钮内部移动,就响应了WM_MOUSEMOVE消息,就咩有按下的那个状态了,所以我加了一个标记,当按下按钮时,WM_MOUSEHOVER 里的内容就不执行。
但现在问题又来了,鼠标点击按钮按下,不放开,然后从按钮上移开,为什么没有发送 WM_MOUSELEAVE 消息?? 就是按下鼠标不放,鼠标离开按钮,按钮还是那个 WM_LBUTTONDOWN 里的那个状态。
怎么实现按下鼠标移开按钮(不放开),按钮响应 WM_MOUSELEAVE 消息呢?
m_trackMou.cbSize = sizeof(m_trackMou);
m_trackMou.dwFlags = TME_LEAVE | TME_HOVER;
m_trackMou.dwHoverTime = 0;
m_trackMou.hwndTrack = TtheApp.theCon->hwndBut1; .....
switch ( butMessage )
{
case WM_MOUSEMOVE:
{
TrackMouseEvent(&(TtheApp.theCon->m_trackMou));
}
break; case WM_MOUSEHOVER:
{
if( !TtheApp.theCon->IsDown )
BitBlt(::GetDC(hWnd), 0,0,80,30, TtheApp.theCon->m_hdcSrcHL,0,0,SRCCOPY);
}
break; case WM_MOUSELEAVE:
{
BitBlt(::GetDC(hWnd), 0,0,80,30, TtheApp.theCon->m_hdcSrcHL,0,30,SRCCOPY);
}
break; case WM_LBUTTONDOWN:
{
BitBlt(::GetDC(hWnd), 0,0,80,30, TtheApp.theCon->m_hdcSrcHL,0,60,SRCCOPY);
TtheApp.theCon->IsDown = true;
}
break;
case WM_LBUTTONUP:
{
BitBlt(::GetDC(hWnd), 0,0,80,30, TtheApp.theCon->m_hdcSrcHL,0,60,SRCCOPY);
TtheApp.theCon->IsDown = false;
}
break;。。
确实没有响应啊,在WM_MOUSELEAVE 消息里加入 一个对话框MessageBox(hWnd, ("test!"), ("消息"), MB_OK); 如果按钮按下按钮不放开,然后鼠标移出按钮,对话框并没有弹出,当放下鼠标时,才弹出啊 啊
case WM_LBUTTONDOWN:
OutputDebugString("LBUTTONDOWN\n");
PostMessage(hWnd, WM_CANCELMODE, 0, 0);
break;
恩,没错,这个可以实现。 请问消息 WM_CANCELMODE 具体作用是怎么,?在网上找资料不清不楚
另外, 有哪位仁兄写过 Hover-Leave效果按钮,? 能否把代码共享出来?