00001
00002
00003
00004
00005 #include "MouseEvents.h"
00006
00007 #define CTRL_KEY 1000
00008 #define SHIFT_KEY 2000
00009
00010 #define PRESSED_LEFT 0
00011 #define RELEASED_LEFT -5
00012 #define CLCK_LEFT 3
00013 #define DBL_CLCK_LEFT 10
00014
00015 #define PRESSED_MIDDLE 1
00016 #define RELEASED_MIDDLE -4
00017 #define CLCK_MIDDLE 4
00018 #define DBL_CLCK_MIDDLE 11
00019
00020 #define PRESSED_RIGHT 2
00021 #define RELEASED_RIGHT -3
00022 #define CLCK_RIGHT 5
00023 #define DBL_CLCK_RIGHT 12
00024
00025 static int MOUSEX=0;
00026 static int MOUSEY=0;
00027
00028 #define TimerIdLeft 10
00029 #define TimerIdMiddle 20
00030 #define TimerIdRight 30
00031
00032 static BOOL wait_dclick_left = FALSE;
00033 static BOOL dclick_left = FALSE;
00034 static BOOL lose_up_left=FALSE;
00035
00036 static BOOL wait_dclick_middle = FALSE;
00037 static BOOL dclick_middle = FALSE;
00038 static BOOL lose_up_middle=FALSE;
00039
00040 static BOOL wait_dclick_right = FALSE;
00041 static BOOL dclick_right = FALSE;
00042 static BOOL lose_up_right=FALSE;
00043
00044 static void CALLBACK reset_left_click_counter(HWND hwnd,UINT msg,UINT_PTR id,DWORD data);
00045 static void CALLBACK reset_middle_click_counter(HWND hwnd,UINT msg,UINT_PTR id,DWORD data);
00046 static void CALLBACK reset_right_click_counter(HWND hwnd,UINT msg,UINT_PTR id,DWORD data);
00047
00048 static void KillTimerLeft(HWND hwnd);
00049 static void KillTimerMiddle(HWND hwnd);
00050 static void KillTimerRight(HWND hwnd);
00051
00052 void ON_EVENT_GRAPH_WM_MOUSEMOVE(HWND hwnd, int x, int y, UINT keyFlags)
00053 {
00054 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00055
00056 int horzsinPos=ScilabGC->horzsi.nPos;
00057 int vertsinPos=ScilabGC->vertsi.nPos;
00058
00059 if ( wait_dclick_left || wait_dclick_middle || wait_dclick_right )
00060 {
00061 if (wait_dclick_left)
00062 {
00063 KillTimerMiddle(hwnd);
00064 KillTimerRight(hwnd);
00065
00066 wait_dclick_left=FALSE;
00067 KillTimer(hwnd,TimerIdLeft);
00068
00069 if (GetKeyState(VK_CONTROL)<0)
00070 {
00071 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, CTRL_KEY+PRESSED_LEFT, 0, 0);
00072 }
00073 else
00074 if (GetKeyState(VK_SHIFT)<0)
00075 {
00076 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, SHIFT_KEY+PRESSED_LEFT, 0, 0);
00077 }
00078 else
00079 {
00080 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos,PRESSED_LEFT, 0, 0);
00081 }
00082 return ;
00083 }
00084
00085 if (wait_dclick_middle)
00086 {
00087 KillTimerLeft(hwnd);
00088 KillTimerRight(hwnd);
00089
00090 wait_dclick_middle=FALSE;
00091 KillTimer(hwnd,TimerIdMiddle);
00092
00093 if (GetKeyState(VK_CONTROL)<0)
00094 {
00095 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, CTRL_KEY+PRESSED_MIDDLE, 0, 0);
00096 }
00097 else
00098 if (GetKeyState(VK_SHIFT)<0)
00099 {
00100 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, SHIFT_KEY+PRESSED_MIDDLE, 0, 0);
00101 }
00102 else
00103 {
00104 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos,PRESSED_MIDDLE, 0, 0);
00105 }
00106 return ;
00107 }
00108
00109 if (wait_dclick_right)
00110 {
00111 KillTimerLeft(hwnd);
00112 KillTimerMiddle(hwnd);
00113
00114 wait_dclick_right=FALSE;
00115 KillTimer(hwnd,TimerIdRight);
00116
00117 if (GetKeyState(VK_CONTROL)<0)
00118 {
00119 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, CTRL_KEY+PRESSED_RIGHT, 0, 0);
00120 }
00121 else
00122 if (GetKeyState(VK_SHIFT)<0)
00123 {
00124 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, SHIFT_KEY+PRESSED_RIGHT, 0, 0);
00125 }
00126 else
00127 {
00128 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos,PRESSED_RIGHT, 0, 0);
00129 }
00130 return ;
00131 }
00132 }
00133 else
00134 {
00135 PushClickQueue (ScilabGC->CurWindow,(int) MOUSEX +horzsinPos,MOUSEY +vertsinPos, -1, 1, 0);
00136 MOUSEX= x;
00137 MOUSEY= y;
00138 }
00139
00140 }
00141
00142 void ON_EVENT_GRAPH_WM_LBUTTONDOWN(HWND hwnd, BOOL fDoubleClick, int x, int y,UINT keyFlags)
00143 {
00144 KillTimerMiddle(hwnd);
00145 KillTimerRight(hwnd);
00146
00147 MOUSEX= x;
00148 MOUSEY= y;
00149
00150 if (wait_dclick_left)
00151 {
00152 wait_dclick_left = FALSE;
00153 dclick_left = TRUE;
00154 lose_up_left = FALSE;
00155 KillTimer(hwnd,TimerIdLeft);
00156 return;
00157 }
00158
00159 SetTimer(hwnd,TimerIdLeft,GetDoubleClickTime(),reset_left_click_counter);
00160 wait_dclick_left = TRUE;
00161 lose_up_left = FALSE;
00162 dclick_left = FALSE;
00163 }
00164
00165 void ON_EVENT_GRAPH_WM_LBUTTONUP(HWND hwnd, int x, int y, UINT keyFlags)
00166 {
00167 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00168 int horzsinPos=ScilabGC->horzsi.nPos;
00169 int vertsinPos=ScilabGC->vertsi.nPos;
00170
00171 KillTimerMiddle(hwnd);
00172 KillTimerRight(hwnd);
00173
00174 MOUSEX= x;
00175 MOUSEY= y;
00176
00177 if (wait_dclick_left)
00178 {
00179 lose_up_left=TRUE;
00180 return;
00181 }
00182
00183 if (!dclick_left)
00184 {
00185 if (GetKeyState(VK_CONTROL)<0)
00186 {
00187 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_LEFT+CTRL_KEY, 0, -1);
00188 }
00189 else
00190 if (GetKeyState(VK_SHIFT)<0)
00191 {
00192 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_LEFT+SHIFT_KEY, 0, -1);
00193 }
00194 else
00195 {
00196 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_LEFT, 0, -1);
00197 }
00198 }
00199 else
00200 if (lose_up_left)
00201 {
00202 lose_up_left=FALSE;
00203 }
00204 }
00205
00206 void ON_EVENT_GRAPH_WM_LBUTTONDBLCLK(HWND hwnd, BOOL fDoubleClick, int x, int y,UINT keyFlags)
00207 {
00208 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00209 int horzsinPos=ScilabGC->horzsi.nPos;
00210 int vertsinPos=ScilabGC->vertsi.nPos;
00211
00212 KillTimerMiddle(hwnd);
00213 KillTimerRight(hwnd);
00214
00215 MOUSEX= x;
00216 MOUSEY= y;
00217
00218 wait_dclick_left=FALSE;
00219 dclick_left = TRUE;
00220 KillTimer(hwnd,TimerIdLeft);
00221 lose_up_left=TRUE;
00222
00223 if (GetKeyState(VK_CONTROL)<0)
00224 {
00225 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+DBL_CLCK_LEFT, 0, 0);
00226 }
00227 else
00228 if (GetKeyState(VK_SHIFT)<0)
00229 {
00230 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+DBL_CLCK_LEFT, 0, 0);
00231 }
00232 else
00233 {
00234 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, DBL_CLCK_LEFT, 0, 0);
00235 }
00236 }
00237
00238
00239 void ON_EVENT_GRAPH_WM_MBUTTONDOWN(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
00240 {
00241 MOUSEX= x;
00242 MOUSEY= y;
00243
00244 KillTimerLeft(hwnd);
00245 KillTimerRight(hwnd);
00246
00247 if (wait_dclick_middle)
00248 {
00249 wait_dclick_middle = FALSE;
00250 dclick_middle = TRUE;
00251 lose_up_middle = FALSE;
00252 KillTimer(hwnd,TimerIdMiddle);
00253 return;
00254 }
00255
00256 SetTimer(hwnd,TimerIdMiddle,GetDoubleClickTime(),reset_middle_click_counter);
00257 wait_dclick_middle = TRUE;
00258 lose_up_middle = FALSE;
00259 dclick_middle = FALSE;
00260 }
00261
00262 void ON_EVENT_GRAPH_WM_MBUTTONUP(HWND hwnd, int x, int y, UINT keyFlags)
00263 {
00264 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00265 int horzsinPos=ScilabGC->horzsi.nPos;
00266 int vertsinPos=ScilabGC->vertsi.nPos;
00267
00268 KillTimerLeft(hwnd);
00269 KillTimerRight(hwnd);
00270
00271 MOUSEX= x;
00272 MOUSEY= y;
00273
00274 if (wait_dclick_middle)
00275 {
00276 lose_up_middle=TRUE;
00277 return;
00278 }
00279
00280 if (!dclick_middle)
00281 {
00282 if (GetKeyState(VK_CONTROL)<0)
00283 {
00284 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_MIDDLE+CTRL_KEY, 0, -1);
00285 }
00286 else
00287 if (GetKeyState(VK_SHIFT)<0)
00288 {
00289 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_MIDDLE+SHIFT_KEY, 0, -1);
00290 }
00291 else
00292 {
00293 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_MIDDLE, 0, -1);
00294 }
00295 }
00296 else
00297 if (lose_up_middle)
00298 {
00299 lose_up_middle=FALSE;
00300 }
00301 }
00302
00303 void ON_EVENT_GRAPH_WM_MBUTTONDBLCLK(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
00304 {
00305 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00306 int horzsinPos=ScilabGC->horzsi.nPos;
00307 int vertsinPos=ScilabGC->vertsi.nPos;
00308
00309 MOUSEX= x;
00310 MOUSEY= y;
00311
00312 KillTimerLeft(hwnd);
00313 KillTimerRight(hwnd);
00314
00315 wait_dclick_middle=FALSE;
00316 dclick_middle = TRUE;
00317 KillTimer(hwnd,TimerIdMiddle);
00318 lose_up_middle=TRUE;
00319
00320 if (GetKeyState(VK_CONTROL)<0)
00321 {
00322 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+DBL_CLCK_MIDDLE, 0, 0);
00323 }
00324 else
00325 if (GetKeyState(VK_SHIFT)<0)
00326 {
00327 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+DBL_CLCK_MIDDLE, 0, 0);
00328 }
00329 else
00330 {
00331 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, DBL_CLCK_MIDDLE, 0, 0);
00332 }
00333 }
00334
00335 void ON_EVENT_GRAPH_WM_RBUTTONDOWN(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
00336 {
00337 MOUSEX= x;
00338 MOUSEY= y;
00339
00340 KillTimerLeft(hwnd);
00341 KillTimerRight(hwnd);
00342
00343 if (wait_dclick_right)
00344 {
00345 wait_dclick_right = FALSE;
00346 dclick_right = TRUE;
00347 lose_up_right = FALSE;
00348 KillTimer(hwnd,TimerIdRight);
00349 return;
00350 }
00351
00352 SetTimer(hwnd,TimerIdRight,GetDoubleClickTime(),reset_right_click_counter);
00353 wait_dclick_right = TRUE;
00354 lose_up_right = FALSE;
00355 dclick_right = FALSE;
00356 }
00357
00358 void ON_EVENT_GRAPH_WM_RBUTTONUP(HWND hwnd, int x, int y, UINT keyFlags)
00359 {
00360 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00361 int horzsinPos=ScilabGC->horzsi.nPos;
00362 int vertsinPos=ScilabGC->vertsi.nPos;
00363
00364 MOUSEX= x;
00365 MOUSEY= y;
00366
00367 KillTimerLeft(hwnd);
00368 KillTimerMiddle(hwnd);
00369
00370 if (wait_dclick_right)
00371 {
00372 lose_up_right=TRUE;
00373 return;
00374 }
00375
00376 if (!dclick_right)
00377 {
00378 if (GetKeyState(VK_CONTROL)<0)
00379 {
00380 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_RIGHT+CTRL_KEY, 0, -1);
00381 }
00382 else
00383 if (GetKeyState(VK_SHIFT)<0)
00384 {
00385 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_RIGHT+SHIFT_KEY, 0, -1);
00386 }
00387 else
00388 {
00389 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, RELEASED_RIGHT, 0, -1);
00390 }
00391 }
00392 else
00393 if (lose_up_right)
00394 {
00395 lose_up_right=FALSE;
00396 }
00397 }
00398
00399 void ON_EVENT_GRAPH_WM_RBUTTONDBLCLK(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
00400 {
00401 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00402 int horzsinPos=ScilabGC->horzsi.nPos;
00403 int vertsinPos=ScilabGC->vertsi.nPos;
00404
00405 MOUSEX= x;
00406 MOUSEY= y;
00407
00408 KillTimerLeft(hwnd);
00409 KillTimerMiddle(hwnd);
00410
00411 wait_dclick_right=FALSE;
00412 dclick_right = TRUE;
00413 KillTimer(hwnd,TimerIdRight);
00414 lose_up_right=TRUE;
00415
00416 if (GetKeyState(VK_CONTROL)<0)
00417 {
00418 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+DBL_CLCK_RIGHT, 0, 0);
00419 }
00420 else
00421 if (GetKeyState(VK_SHIFT)<0)
00422 {
00423 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+DBL_CLCK_RIGHT, 0, 0);
00424 }
00425 else
00426 {
00427 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, DBL_CLCK_RIGHT, 0, 0);
00428 }
00429 }
00430
00431 void CALLBACK reset_left_click_counter(HWND hwnd,UINT msg,UINT_PTR id,DWORD data)
00432 {
00433 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00434 int horzsinPos=ScilabGC->horzsi.nPos;
00435 int vertsinPos=ScilabGC->vertsi.nPos;
00436
00437 KillTimerMiddle(hwnd);
00438 KillTimerRight(hwnd);
00439
00440 wait_dclick_left=FALSE;
00441 KillTimer(hwnd,TimerIdLeft);
00442
00443 if (dclick_left)
00444 {
00445 if (GetKeyState(VK_CONTROL)<0)
00446 {
00447 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+DBL_CLCK_LEFT, 0, 0);
00448 }
00449 else
00450 if (GetKeyState(VK_SHIFT)<0)
00451 {
00452 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+DBL_CLCK_LEFT, 0, 0);
00453 }
00454 else
00455 {
00456 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, DBL_CLCK_LEFT, 0, 0);
00457 }
00458 }
00459 else
00460 {
00461 if (lose_up_left)
00462 {
00463 if (GetKeyState(VK_CONTROL)<0)
00464 {
00465 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+CLCK_LEFT, 0, 0);
00466 }
00467 else
00468 if (GetKeyState(VK_SHIFT)<0)
00469 {
00470 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+CLCK_LEFT, 0, 0);
00471 }
00472 else
00473 {
00474 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos,CLCK_LEFT, 0, 0);
00475 }
00476 lose_up_left=FALSE;
00477 }
00478 else
00479 {
00480 if (GetKeyState(VK_CONTROL)<0)
00481 {
00482 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, CTRL_KEY+PRESSED_LEFT, 0, 0);
00483 }
00484 else
00485 if (GetKeyState(VK_SHIFT)<0)
00486 {
00487 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, SHIFT_KEY+PRESSED_LEFT, 0, 0);
00488 }
00489 else
00490 {
00491 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos,PRESSED_LEFT, 0, 0);
00492 }
00493 }
00494 }
00495 }
00496
00497 void CALLBACK reset_middle_click_counter(HWND hwnd,UINT msg,UINT_PTR id,DWORD data)
00498 {
00499 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00500 int horzsinPos=ScilabGC->horzsi.nPos;
00501 int vertsinPos=ScilabGC->vertsi.nPos;
00502
00503 KillTimerLeft(hwnd);
00504 KillTimerRight(hwnd);
00505
00506 wait_dclick_left=FALSE;
00507 KillTimer(hwnd,TimerIdMiddle);
00508
00509 if (dclick_middle)
00510 {
00511 if (GetKeyState(VK_CONTROL)<0)
00512 {
00513 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+DBL_CLCK_MIDDLE, 0, 0);
00514 }
00515 else
00516 if (GetKeyState(VK_SHIFT)<0)
00517 {
00518 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+DBL_CLCK_MIDDLE, 0, 0);
00519 }
00520 else
00521 {
00522 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, DBL_CLCK_MIDDLE, 0, 0);
00523 }
00524 }
00525 else
00526 {
00527 if (lose_up_middle)
00528 {
00529 if (GetKeyState(VK_CONTROL)<0)
00530 {
00531 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+CLCK_MIDDLE, 0, 0);
00532 }
00533 else
00534 if (GetKeyState(VK_SHIFT)<0)
00535 {
00536 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+CLCK_MIDDLE, 0, 0);
00537 }
00538 else
00539 {
00540 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CLCK_MIDDLE, 0, 0);
00541 }
00542 lose_up_middle=FALSE;
00543 }
00544 else
00545 {
00546 if (GetKeyState(VK_CONTROL)<0)
00547 {
00548 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, CTRL_KEY+PRESSED_MIDDLE, 0, 0);
00549 }
00550 else
00551 if (GetKeyState(VK_SHIFT)<0)
00552 {
00553 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, SHIFT_KEY+PRESSED_MIDDLE, 0, 0);
00554 }
00555 else
00556 {
00557 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos,PRESSED_MIDDLE, 0, 0);
00558 }
00559 }
00560 }
00561 }
00562
00563 void CALLBACK reset_right_click_counter(HWND hwnd,UINT msg,UINT_PTR id,DWORD data)
00564 {
00565 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00566 int horzsinPos=ScilabGC->horzsi.nPos;
00567 int vertsinPos=ScilabGC->vertsi.nPos;
00568
00569 KillTimerLeft(hwnd);
00570 KillTimerMiddle(hwnd);
00571
00572 wait_dclick_right=FALSE;
00573 KillTimer(hwnd,TimerIdRight);
00574
00575 if (dclick_right)
00576 {
00577 if (GetKeyState(VK_CONTROL)<0)
00578 {
00579 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+DBL_CLCK_RIGHT, 0, 0);
00580 }
00581 else
00582 if (GetKeyState(VK_SHIFT)<0)
00583 {
00584 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+DBL_CLCK_RIGHT, 0, 0);
00585 }
00586 else
00587 {
00588 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, DBL_CLCK_RIGHT, 0, 0);
00589 }
00590 }
00591 else
00592 {
00593 if (lose_up_right)
00594 {
00595 if (GetKeyState(VK_CONTROL)<0)
00596 {
00597 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CTRL_KEY+CLCK_RIGHT, 0, 0);
00598 }
00599 else
00600 if (GetKeyState(VK_SHIFT)<0)
00601 {
00602 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, SHIFT_KEY+CLCK_RIGHT, 0, 0);
00603 }
00604 else
00605 {
00606 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY + vertsinPos, CLCK_RIGHT, 0, 0);
00607 }
00608 lose_up_right=FALSE;
00609 }
00610 else
00611 {
00612 if (GetKeyState(VK_CONTROL)<0)
00613 {
00614 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, CTRL_KEY+PRESSED_RIGHT, 0, 0);
00615 }
00616 else
00617 if (GetKeyState(VK_SHIFT)<0)
00618 {
00619 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos, SHIFT_KEY+PRESSED_RIGHT, 0, 0);
00620 }
00621 else
00622 {
00623 PushClickQueue (ScilabGC->CurWindow, MOUSEX+horzsinPos,MOUSEY+vertsinPos,PRESSED_RIGHT, 0, 0);
00624 }
00625 }
00626 }
00627 }
00628
00629 static void KillTimerLeft(HWND hwnd)
00630 {
00631 wait_dclick_left = FALSE;
00632 dclick_left = FALSE;
00633 lose_up_left=FALSE;
00634 KillTimer(hwnd,TimerIdLeft);
00635 }
00636
00637 static void KillTimerMiddle(HWND hwnd)
00638 {
00639 wait_dclick_middle = FALSE;
00640 dclick_middle = FALSE;
00641 lose_up_middle=FALSE;
00642 KillTimer(hwnd,TimerIdMiddle);
00643 }
00644
00645 static void KillTimerRight(HWND hwnd)
00646 {
00647 wait_dclick_right = FALSE;
00648 dclick_right = FALSE;
00649 lose_up_right=FALSE;
00650 KillTimer(hwnd,TimerIdRight);
00651 }
00652