2010.10.20
一、关于鼠标的双击
今天遇到了一个问题,view中,单击一个图形没有问题,双击则崩掉。事件的处理是这样的,LBUTTONDOWN 的时候,产生一个对象;WM_LBUTTONUP 的时候,根据up时的point,判断如果处理前面生成的对象;所以这是一个匹配操作。但是双击就会崩溃。
后来通过计数发现,在双击时,程序只进入了1次Down,2次up,导致前面的操作没有匹配进行,从而使数据错误。
引用:
如果在窗口风格中未包含CS_DBLCLKS,而使用者在短时间内双击了鼠标按键,那么窗口消息处理程序会接收到下面这些消息:
WM_LBUTTONDOWNWM_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

浙公网安备 33010602011771号