今天修改一程序的Bug,修改了半天,终无头绪。后猛然发现是因为双击的时候,也是响应单击消息函数。遂google,发现:Windows系统在系统的双击时间限制里双击鼠标左键调用OnLButtonDBlClk,双击鼠标左键实际上产生4个事件:WM_LBUTTONDOWN WM_LBUTTONUP,然后WM_LBUTTONDBLCK被调用,鼠标释放时的WM_LBUTTONUP消息。
最后还是实现了所需功能,但是感觉还不理想,如果能在PreTranslateMessage函数里面实现就更好了......
void CClickOrDBDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default// AfxMessageBox("one"); MSG message; DWORD st = GetTickCount(); while(1) { if(::PeekMessage(&message, NULL, 0 ,0 , PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); if(message.message == WM_LBUTTONDBLCLK) { AfxMessageBox("two"); break; } } DWORD et = GetTickCount(); if(et - st > 200) { AfxMessageBox("one"); break; } } CDialog::OnLButtonDown(nFlags, point);}