mfc的按钮不知道为什么不能响应双击响应。如果需要响应双击,要根据WM_LBUTTONUP来判断,这个判断要放到PreTranslateMessage里做,所以我们要是想响应按钮的双击,应该要继承一个按钮,并在PreTranslateMessage写如下代码:
BOOL CDuiBaseControl::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg->message == WM_LBUTTONUP)//mfc的按钮不知道为什么不能响应双击响应。如果需要响应双击,要根据WM_LBUTTONUP来判断 { MSG message; DWORD st = GetTickCount();//记录下鼠标弹起时的时间 while (1) { if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) { if (message.message == WM_LBUTTONUP){//如果在100ms内,找到新的鼠标弹起的消息,则将消息为双击 pMsg->message = WM_LBUTTONDBLCLK;//将会响应 OnLButtonDblClk 函数,该函数可在类向导中自动生成 break; } else if (message.message == WM_LBUTTONDOWN){//如果收到鼠标按下消息,不做处理 } else{ //如果不是鼠标按下或弹起的消息,则将消息插进消息上队列重新分发 ::TranslateMessage(&message); ::DispatchMessage(&message); } DWORD et = GetTickCount();//如果时间差超过100ms,则将此次点击当作单击处理 if (et - st > 100){ pMsg->message == WM_LBUTTONUP; break;; } } } } return __super::PreTranslateMessage(pMsg); }
然后mfc就会响应OnLButtonDblClk函数(即WM_LBUTTONDBLCLK的映射函数)