一次单击 为何响应Ph_EV_BUT_RELEASE 三次 只响应Ph_EV_BUT_PRESS 一次

PtAddFilterCallback( window, Ph_EV_BUT_RELEASE,
event_act_cb, NULL );


我是通过代码直接给窗口添加事件响应函数

函数原型如下


int
event_act_cb(PtWidget_t *w, void *data,
PtCallbackInfo_t *cbinfo)
{
PhPointerEvent_t *event_data;

/* eliminate ‘unreferenced’ warnings */
w = w, data = data, cbinfo = cbinfo;

if (cbinfo->event->type != Ph_EV_BUT_RELEASE) {
printf (“Not a Ph_EV_BUT_RELEASE event\n”);
} else {
printf (“It’s a Ph_EV_BUT_RELEASE event\n”);

event_data = (PhPointerEvent_t *)
PhGetData (cbinfo->event);

if (event_data->key_mods & Pk_KM_Shift )
printf (" Shift\n");

if (event_data->key_mods & Pk_KM_Ctrl )
printf (" Ctrl\n");

if (event_data->key_mods & Pk_KM_Alt )
printf (" Alt\n");

}
return( Pt_CONTINUE );

}


以上的一次单击 结果打印出了
It’s a Ph_EV_BUT_RELEASE event
It’s a Ph_EV_BUT_RELEASE event
It’s a Ph_EV_BUT_RELEASE event


而如果把Ph_EV_BUT_RELEASE 改成Ph_EV_BUT_PRESS

只打印了It’s a Ph_EV_BUT_PRESS event

我在函数里明确只判断了一次 为何响应Ph_EV_BUT_RELEASE 会进入三次呢?

请各位大大 指导下! :slight_smile:

看了帮助终于明白了

Ph_EV_RELEASE_REAL
Ph_EV_RELEASE_PHANTOM
Ph_EV_RELEASE_ENDCLICK

原来这3个都是Ph_EV_BUT_RELEASE的
很特别的事件消息 :open_mouth: