2010.10.20

一、关于鼠标的双击

    今天遇到了一个问题,view中,单击一个图形没有问题,双击则崩掉。事件的处理是这样的,LBUTTONDOWN 的时候,产生一个对象;WM_LBUTTONUP 的时候,根据up时的point,判断如果处理前面生成的对象;所以这是一个匹配操作。但是双击就会崩溃。

    后来通过计数发现,在双击时,程序只进入了1次Down,2次up,导致前面的操作没有匹配进行,从而使数据错误。

    引用:

    如果在窗口风格中未包含CS_DBLCLKS,而使用者在短时间内双击了鼠标按键,那么窗口消息处理程序会接收到下面这些消息:       
  WM_LBUTTONDOWN       

  WM_LBUTTONUP       
  WM_LBUTTONDOWN       
  WM_LBUTTONUP       
 如果您的窗口类别风格中包含了CS_DBLCLKS,那么双击时窗口消息处理程序将收到如下消息:       
  WM_LBUTTONDOWN       
  WM_LBUTTONUP       
  WM_LBUTTONDBLCLK       
  WM_LBUTTONUP       
 WM_LBUTTONDBLCLK消息简单地替换了第二个WM_LBUTTONDOWN消息。

二、关于快捷键的操作:

    环境是这样的,在Dialog上放了一个view,想在view捕获快捷键,

以下方法在dialog上可以,在view中就是不行

1、 m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
2、

然后重载对话框的PreTranslateMessage函数,在
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) 
{
 if (m_hAccelTable) 
 {
      if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) 
     {
          return(TRUE); 
     }

if ( pMsg->message == WM_KEYDOWN )
  {
   switch( pMsg->wParam)
   {
   case 46: //delete
    {
     m_pDrawView->OnDeleteDisplayObj();
     break;
    }
   }
  }
 }
 return CDialog::PreTranslateMessage(pMsg);
}

参考其它文章:

1、http://www.cnblogs.com/zengcan/archive/2010/01/25/1655908.html

2、http://hi.baidu.com/wjc1986/blog/item/00cedd1ee007d365f624e4fa.html

 

 

 

 

 

 

posted @ 2010-10-20 17:55  pjh123  阅读(173)  评论(0)    收藏  举报