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的映射函数)