ncurses_getmouse

(PHP 4 >= 4.2.0, PHP 5)

ncurses_getmouse -- Reads mouse event

Description

bool ncurses_getmouse ( array &mevent )

警告

本函数是实验性的。本函数的行为,包括函数名称以及其它任何关于本函数的文档可能会在没有通知的情况下随 PHP 以后的发布而改变。使用本函数风险自担。

ncurses_getmouse() reads mouse event out of queue. Function ncurses_getmouse() will return ;FALSE if a mouse event is actually visible in the given window, otherwise it will return TRUE. Event options will be delivered in parameter mevent, which has to be an array, passed by reference (see example below). On success an associative array with following keys will be delivered:

  • "id" : Id to distinguish multiple devices

  • "x" : screen relative x-position in character cells

  • "y" : screen relative y-position in character cells

  • "z" : currently not supported

  • "mmask" : Mouse action

例子 1. ncurses_getmouse() example

<?php
switch (ncurses_getch()){
  case
NCURSES_KEY_MOUSE:
    if (!
ncurses_getmouse(&$mevent)){
      if (
$mevent["mmask"] & NCURSES_MOUSE_BUTTON1_PRESSED){
        
$mouse_x = $mevent["x"]; // Save mouse position
        
$mouse_y = $mevent["y"];
      }
    }
  break;

  default:
    
/* .... */
}
?>

See also ncurses_ungetmouse()


add a note add a note User Contributed Notes
m dot quinton at gmail dot com
26-Sep-2005 07:05
a working example with mouse, 3 windows  (need to be completed, but it works) ...

<?php

error_reporting
(E_ALL);

function
win($w, $h, $x, $y, $txt){
  
// now lets create a small window
  
$win = ncurses_newwin($w, $h, $x, $y);
  
// border our small window.
  
ncurses_wborder($win,0,0, 0,0, 0,0, 0,0);
  
# ncurses_wrefresh($win);// paint both windows
  
ncurses_refresh();// paint both windows

   // move into the small window and write a string
  
ncurses_mvwaddstr($win, 0, 1, " $txt ");
  
ncurses_mvwaddstr($win, 1, 1, "($w, $h, $x, $y)");

  
// show our handiwork and refresh our small window
  
ncurses_wrefresh($win);

   return
$win;
}

// Initialie ncurses
$ncurse = ncurses_init();
// A full screen window

$win0 = win(0, 0, 0, 0, 'win0');
$win1 = win(10, 30, 7, 25, 'win1');
$win2 = win(10, 30, 20, 25, 'win2');
$info = win(15, 20, 2, 2, 'info');

// Draw everything so far
// ncurses_refresh();

$newmask = NCURSES_BUTTON1_CLICKED + NCURSES_BUTTON1_RELEASED;
# $newmask = NCURSES_ALL_MOUSE_EVENTS;

$mask = ncurses_mousemask($newmask, &$oldmask);
$events = array();

while(
1){

  
ncurses_wmove($info, 1,1);
  
$ch = ncurses_getch();

  
ncurses_wclear($info);
  
ncurses_refresh();// paint both windows
  
ncurses_wborder($info,0,0, 0,0, 0,0, 0,0);
  
ncurses_refresh();// paint both windows
  
ncurses_mvwaddstr($win, 0, 1, " info ");
  
ncurses_refresh();// paint both windows

  
switch($ch){

   case
NCURSES_KEY_MOUSE:

       if(
ncurses_getmouse($mevent)){
          
$events[] = $mevent;

          
ncurses_mvwaddstr($info, 2, 1, " mouse event  ");
          
ncurses_mvwaddstr($info, 3, 1, " ({$mevent['x']}/{$mevent['y']}) ");
          
ncurses_mvwaddstr($info, 4, 1, " ({$mevent['mmask']}) ");

          
ncurses_wrefresh($info);
       }
       break;

   case
chr('q'):
       break
2;

   default:

       if(
$ch > 0x40)
          
$txt = chr($ch) . " $ch ";
       else
          
$txt = '.' . " $ch";

      
ncurses_mvwaddstr($info, 1, 1, " $txt  ");
      
ncurses_wrefresh($info);

   }

   if(
chr($ch) == 'q')
       break;
}

ncurses_end();// clean up our screen

print_r($events);

?>