CEGUI 鼠标双击事件 解决办法

cegui内部支持两种方式产生鼠标双击事件:

第一种,接受window直接发送的双击事件,与之对应,外部要有一个消息注入:

case WM_LBUTTONDBLCLK:
CEGUI::System::getSingleton().injectMouseButtonDoubleClick(CEGUI::LeftButton);
break;

第二种,连续接收到两次鼠标单击的事件,如果间隔事件小于某一临界值,则被cegui整合为一个双击事件;

windows中有一个WNDCLASSEX,它的style成员的值决定了会不会产生双击消息;

如果出现了wndClassex.style = CS_DBLCLKS这样的形式,
则间隔时间够短的两次鼠标单击事件会产生一次单击消息和一次双击消息(也就是说此时第二次单击被判断为了一次双击);

如果wndClassex.style = 0(或其他值),windows不会发送出双击消息,再快的两次单击事件也只能够产生两次单击消息;

wndClassex.style = 0,因此两次很快的单击事件被注入到cegui内部时,会被cegui判断成一次双击事件,正常触发相应的双击事件处理函数;(对应着CEGUI上面第二种产生双击事件的方式)

wndClassex.style = CS_DBLCLKS,也就是说很快的两次单击事件,产生了一个单击消息和一个双击消息,这当然也没有问题,
问题是,将双击消息注入到cegui内部,即缺少了上面贴出的那段代码;
最终导致cegui既不能以第一种方式产生双击事件,也不能以第二种方式产生双击事件;
(此时当然应该是以第一种方式产生双击事件)

你可能感兴趣的:(CEGUI 鼠标双击事件 解决办法)